我有输入.txt
abcd
abcg
要选择以“a”开头并以“g”结尾的行,我写道:
cat input.txt | awk '/^a/' | awk '/g$/{print $0}'
如何组合正则表达式^a
并g$
能够仅使用 的一个实例awk
?
答案1
只需使用一个匹配开始和结束的正则表达式:
awk '/^a.*g$/' input.txt
或者,如果您确实想使用两个,可以将它们组合起来&&
:
awk '/^a/ && /g$/' input.txt
答案2
不需要 awk,只需 grep:
grep "^a.*g$" input.txt
答案3
为了使答案尽可能通用,使用awk,这是执行所需操作的另一种方法,其中图案字符串被传递为多变的从命令行。
本示例中嵌入了演示测试数据。
使用脚本
#!/bin/sh
sSTRT="${1}"
sEND="${2}"
echo "John Wells
John Wayne
Robert Wayne" |
awk -v sTrt="^${sSTRT}" -v sEnd="${sEND}\$" ' $0 ~ sTrt && $0 ~ sEnd '
并执行命令
script "John" "Wayne"
输出是
John Wayne
忽略其他行。
特别注意:“^”abd“$”必须作为 awk 变量的一部分逐字传递。