我有一个由{##}
分隔的文件。我试过了:
$ cat infile | cut -d" {##} " -f1 | grep -w "word"
但是我无法使cut
命令正确。如何转义特殊字符(例如!@#$%^&*(){}[]
中的cut
?
答案 0 :(得分:3)
首先,cut
需要单字符分隔符(-d
选项)。所以字符串不起作用,你需要其他工具来准备你的输入,让我们使用sed
。
其次,您应该使用单引号'
而不是双"
,因此它不会被shell解释。
如果我们可以使用|
作为分隔符,这将有效。
cat infile | sed 's/ {##} /|/g' | cut -d'|' -f1 | grep -w 'word'
您可以将分隔符|
替换为从不出现输入文件的字符。
您可以通过在前面加上反斜杠\
或者将它们放在单引号'
中来转义shell字符,它们不会被解释。
答案 1 :(得分:3)
awk也可以使用多字符分隔符:
awk -F ' {##} ' '$1 ~ /\<word\>/ {print $1}' infile
答案 2 :(得分:2)
使用下面的命令而不是cut和grep:
perl -F"{##}" -lane 'print $F[0] if($F[0]=~/\bword\b/)' infile