如何使用带分隔符“{##}”的剪切?

时间:2013-07-08 07:46:26

标签: bash shell grep cut cat

我有一个由{##}分隔的文件。我试过了:

$ cat infile | cut -d" {##} " -f1 | grep -w "word" 

但是我无法使cut命令正确。如何转义特殊字符(例如!@#$%^&*(){}[]中的cut

3 个答案:

答案 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