Shell脚本在两个特殊字符之间获取文本

时间:2015-03-12 04:23:08

标签: string shell grep substring

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

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

哪条线像这样

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

如何获取abcxyz和qwerty部分?

提前致谢

3 个答案:

答案 0 :(得分:2)

使用awk

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

说明:

  • -F"'"

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

  • /^define\(/

    这会选择以define(

  • 开头的行
  • print $4

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

使用sed

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

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

  • /^define\(/

    这会选择以define(

  • 开头的行
  • {

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

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

    这将删除所有文本,包括第三个引号。

  • s/'.*//

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

  • p

    打印该行。

  • }

    这结束了小组。

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

<强>命令:

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

<强>输出:

abcxyz
qwerty

<强>解释

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