我有一个这样的文件:
"text I don't know" command other "text"
"some" different text "type"
我需要使用sed,awk或其他任何bash工具获取“我不知道的文本”和“some”,以便通过管道传输给另一个命令。
任何提示?
答案 0 :(得分:0)
这似乎过于简单,这意味着你可能是awk的新手。这是完全可以接受的,或者我错误地回答了你的问题。我希望它是前者。
以下内容应该按照您的要求进行。将字段分隔符设置为“-F\"
(转义为”with)并打印第二个字段,第一个字段位于“或”的左侧。您可以只放一个管道和行的末尾来做什么你想要的。
awk -F\" '{print FS$2FS}' inputFile.txt
“我不知道的文字”
“一些”
FS是Field Seperator
答案 1 :(得分:0)
sed 's/^\("[^"]*"\).*/\1/'
这涉及包含简单的双引号字段的行,删除任何额外的材料。它会通过任何不匹配的行。
如果要删除不匹配的行,则:
sed -n '/^\("[^"]*"\).*/s//\1/p'
默认情况下不打印,并在找到匹配项时打印。
如果您必须处理数据字段,例如:
"He said, ""It's horrid""" and he meant it!
那么你必须更加努力地工作。如果sed
支持扩展正则表达式或PCRE(Perl兼容正则表达式),则可以执行此操作。如果没有,请改用awk
。
答案 2 :(得分:0)
不确定"
是否应该成为输出的一部分,假设不是。如果我弄错了,那么将它添加到输出中应该没有任何问题(故意将sed
留在下面的列表中,因为@ Jonathan-Leffler的答案非常好)< / p>
不是一个完美的解决方案,因为"
作为第一个字符输出,但它很简单。
cut -d\" -f1-2 input
使用纯bash的解决方案,请参阅5.1 Bourne Shell Variables了解IFS
#!/bin/bash
IFS='"'
while read -ra LINE;
do
echo ${LINE[1]}
done < input
使用awk解决方案,并使用-F
标志将分隔符更改为"
$ awk -F\" '{print $2}' input
最后一个在perl中。 -a
打开autosplit模式 - perl会自动将空白上的输入行拆分为@F
数组。 -F
与-a一起使用,以选择分割线的分隔符。
perl -F\" -lane 'print $F[1]' input