使用sed或awk搜索包含特殊字符的行

时间:2015-10-22 08:11:32

标签: linux awk sed

我想知道Linux中是否有一个命令可以帮助我找到一个以“*”开头并包含特殊字符“|”的行  例如

* Date       | Auteurs

1 个答案:

答案 0 :(得分:2)

只需使用:

grep -ne '^\*.*|' "${filename}"

或者如果您想使用sed

sed -n '/^\*.*|/{=;p}' "${filename}" | sed '{N;s/\n/:/}'

或(gnu)awk等效(需要反斜杠管道):

awk '/^\*.*\|/' "${filename}"

其中:

  • ^:行的开头
  • \*:文字*
  • .*:零个或多个通用字符(不是换行符)
  • |:文字管道

NB "${filename}":我假设你在脚本中使用命令,目标文件在双引号变量中传递为“$ {filename}”。在shell中只需使用文件的实际名称(或其路径)。

更新 (行号)

修改上述命令以获得匹配行的行号。使用grep很简单,可以添加-n开关:

grep -ne '^\*.*|' "${filename}"

我们得到这样的输出:

81806:* Date       | Auteurs

要从sedawk获得完全相同的输出,我们必须稍微复杂一些命令:

awk '/^\*.*\|/{print NR ":" $0}' "${filename}"
# the = print the line number, p the actual match but it's on two different lines so the second sed call
sed -n '/^\*.*|/{=;p}' "${filename}" | sed '{N;s/\n/:/}'