在文本文件中的两个单词之间提取文本,丢弃shell脚本中的所有其余单词

时间:2014-09-29 17:22:44

标签: shell sed

我有一个以下形式的文件:

    blablabla var="value_var1" blabla
    blablabla var="value_var2" blabla

等等。我想获得一个文本文件,如:

    value_var1
    value_var2
    ...

有什么想法吗?

提前感谢!

4 个答案:

答案 0 :(得分:2)

你可以尝试这个剪切命令:

cut -d \" -f 2 filename

或:

grep -oP '"\K[^" ]*' filename

答案 1 :(得分:0)

你可以试试下面的sed命令,

sed 's/.*"\(.*\)".*/\1/' infile > outfile

如果你想获得前面的空格,那么使用下面的正则表达式。

sed 's/^\( *\).*"\(.*\)".*/\1\2/g' infile > outfile

答案 2 :(得分:0)

perl变体

  • 仅匹配 var =“某事而不是 var2 =“其他”
  • 将匹配行
  • 中的多个出现次数
perl -nE 'say $1 while m/\bvar\s*=\s*"(.*?)"/g'

来自下一个输入

blabl somevar="some" abla var="value_var1" blabla var = "value2" blabal
blablabla var="value_var2" blabla

产生

value_var1
value2
value_var2

从任何 something =“”获取价值下一个grep将起作用

grep -oP '=\s*"\K(.*?)(?=")'

用于输入相同的输入

some
value_var1
value2
value_var2

答案 3 :(得分:0)

使用sed,您可以删除第一个"以及第二个"之后的文字:

sed -e 's/.*"//;s/".*//' < infile > outfile

这比cut版本要复杂一些,但如果以不恰当的方式处理某些行,则可能更容易修复。