Shell 脚本获取 2 个特殊字符之间的文本

Shell Script get text between 2 special characters

我已经阅读了一些内容,但似乎无法解决这个特定问题。我正在写一个 shell 脚本。我正在使用

将文件读入变量
LOCAL_CONFIG=`cat local-config.php`

其中有这样的行

define( 'DB_USER', 'abcxyz' );
define( 'DB_PASSWORD', 'qwerty' );

我怎样才能得到它的 abcxyz 和 qwerty 部分?

提前致谢

使用 grep 和 -P 参数启用 perl-regexp 模式。

$ grep -oP "\bdefine\( *'[^']*' *,  *'\K[^']*(?=' *\);)" file
abcxyz
qwerty

\K 在最后打印时丢弃先前匹配的字符。

使用 awk

$ awk -F"'" '/^define\(/ {print }' local-config.php
abcxyz
qwerty

解释:

  • -F"'"

    这将字段分隔符定义为单引号。

  • /^define\(/

    这将选择以 define(

  • 开头的行
  • print

    对于那些选定的行,这将打印第四个字段。

使用 sed

$ sed -rn "/^define\(/ {s/([^']*'){3}//; s/'.*//; p;}" local-config.php
abcxyz
qwerty
  • -rn

    这会打开扩展的正则表达式语法并关闭自动打印。

  • /^define\(/

    这将选择以 define(

  • 开头的行
  • {

    这将启动一个组。该组中的命令仅针对选定的行执行。

  • s/([^']*'){3}//

    这将删除第三个引号之前的所有文本。

  • s/'.*//

    这将删除下一个剩余引号之后的所有文本。

  • p

    这将打印该行。

  • }

    群到此结束。

"cut" 命令将以更简单的方式执行...

命令:

cat local-config.php | cut -d "'" -f4

输出:

abcxyz
qwerty

解释:

使用 cut with ' 作为分隔符,我们需要在行中使用第四部分 (f4)。