【问题标题】:extract regexp result from string and write it to a variable从字符串中提取正则表达式结果并将其写入变量
【发布时间】:2010-06-30 11:02:11
【问题描述】:

我正在尝试编写一个 shell 脚本,该脚本在指定为参数 $1 的文件中搜索正则表达式,并将找到的子模式写入我可以使用的变量中。

假设我的脚本名为“dosth.sh”,并且我有一个文件“plot.gp”,其中包含一行

set output 'test.tex'

如果我现在执行“dosth.sh plot.gp”,脚本应该从 plot.gp 中提取“test.tex”并将其写入变量。

用 grep 或其他方法怎么可能?

感谢和问候,扬·奥利弗

【问题讨论】:

  • mac os x 上的 unix shell。但我自己想通了。

标签: shell grep


【解决方案1】:
value=`cat $1 | grep -e 'set output' | cut -d'"' -f 2`

使用 " 而不是 ' 并且上面的行完成了这项工作。

【讨论】:

  • 价值=猫 $1 | grep -e '设置输出' |剪切 -d\" -f 2
  • -1 这有很多问题,除了格式问题。
【解决方案2】:

你可以尝试一下

value=`grep '^set output' $x | cut -d' ' -f 3`

(请注意,您将保留$value中的引号

【讨论】:

  • 谢谢!这几乎是我想要的,除了那些 ' 在值。
【解决方案3】:

dosth.sh:

#!/bin/bash
VALUE=`cat $1 | grep <your regexp here>`
echo $VALUE

这可以用作:

$ ./dosth.sh a.txt

然后将找到的字符串存储在变量VALUE

您也可以通过一些参数(通过脚本询问文件名)给出正则表达式:

dosth.sh:

#!/bin/bash
echo -e "Which file do you want to grep?"
read  FILENAME
args=("$@")
VALUE=`cat $FILENAME | grep $args`
echo $VALUE

可以这样使用:

$ ./dosth.sh here comes my * pattern

也许这个链接对你有帮助:Link

【讨论】:

  • 感谢您的回答,但问题是我希望将模式的子匹配存储在我的变量中,而不是孔模式。
【解决方案4】:
variable=$(sed -n '/^set output/ s/[^\x27]*\x27\([^\x27]*\)\x27/\1/p' "$1")

【讨论】:

    【解决方案5】:

    value=$( awk -F"'" '$1 == "set output " {print $2}' somefile )

    【讨论】:

      猜你喜欢
      • 2015-05-16
      • 1970-01-01
      • 1970-01-01
      • 2014-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-09
      • 2021-10-19
      相关资源
      最近更新 更多