2

我有一个由{##}. 我试过了:

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

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

4

3 回答 3

3

awk 也可以使用多字符分隔符:

awk -F ' {##} ' '$1 ~ /\<word\>/ {print $1}' infile
于 2013-07-08T10:25:59.483 回答
3

首先cut需要单字符分隔符(-d选项)。所以字符串不起作用,您需要其他工具来准备输入,让我们使用sed.

其次,您应该使用单引号'而不是双引号,"这样它就不会被 shell 解释。

如果我们可以|用作分隔符,这将起作用。

cat infile | sed 's/ {##} /|/g' | cut -d'|' -f1 | grep -w 'word'

您可以将分隔符替换|为输入文件中永远不会出现的字符。


您可以通过在它们前面加上反斜杠或将它们放在不被解释 \的单引号中来转义 shell 字符。'

于 2013-07-08T08:01:09.580 回答
2

使用以下命令代替 cut 和 grep:

perl -F"{##}" -lane 'print $F[0] if($F[0]=~/\bword\b/)' infile
于 2013-07-08T08:13:46.607 回答