从一行中提取名称

时间:2014-02-10 07:02:01

标签: shell unix sed awk grep

A   B   5   C   Hello: XYZ 'Main Search String', Searching In: '[Name] = "I just want this" AND [State] = Active ('NAME', 'ACT')

如何提取此字符串:I just want this

grep "Main Search String" filename | awk -F"tab" '{print $6}' | ??

5 个答案:

答案 0 :(得分:1)

使用awk

awk -F\" '/Main Search String/ {print $2}' file
I just want this

答案 1 :(得分:1)

使用grep

grep -Po "\[Name\] = \"\K[^\"]*" file
grep -Po "(?<=\[Name\] = \")[^\"]*" file

答案 2 :(得分:0)

sed -n 's/.*\[Name\] = "\([^"]*\)".*/\1/p' YourFile

假设内容介于"和输入文件的任何行上的标签[Name]之间

答案 3 :(得分:0)

如果你想要更多乐趣:)

$ cat /tmp/delme 
A   B   5   C   Hello: XYZ 'Main Search String', Searching In: '[Name] = "I just want this" AND [State] = Active ('NAME', 'ACT')

$ cat /tmp/delme | perl -e 'while (<>)  { if ( /.*[Name] = \"(.*)\"/ ) { print "$1\n"; } };'
I just want this

有了这个你就可以使用整个正则表达式和模式匹配perl提供的东西...而perl几乎在我所知道的每个系统上都有。试一试吧! ;)

已针对模式发现案例进行了编辑:

$ cat /tmp/delme | perl -e 'while (<>)  { print "TEXT: ";print; if ( /.*Main Search String.*\[Name] = "(.*)\"/ ) { print "RESULT: $1\n"; } };'
TEXT: A   B   5   C   Hello: XYZ 'Main Search String', Searching In: '[Name] = "I just want this" AND [State] = Active ('NAME', 'ACT')
RESULT: I just want this
TEXT: A   B   5   C   Hello: XYZ 'Not Search String', Searching In: '[Name] = "I just want this" AND [State] = Active ('NAME', 'ACT')

答案 4 :(得分:0)

用13个字符加上文件名:

cut -d\" -f 2 text.txt

此命令将文本切割为由双引号分隔的列。 (-d \“)创建三列。它用你的答案打印出第二列(-f 2)。

就像Lutz Horn所说,你需要提供更大的数据集来测试这些命令。如果他们不代表他们需要解析的完整模式,他们中的许多将会失败。