我想知道Linux中是否有一个命令可以帮助我找到一个以“*”开头并包含特殊字符“|”的行 例如
* Date | Auteurs
答案 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
要从sed
和awk
获得完全相同的输出,我们必须稍微复杂一些命令:
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/:/}'