awk:选择以字符串开头并以字符串结尾的行

awk:选择以字符串开头并以字符串结尾的行

我有输入.txt

abcd
abcg

要选择以“a”开头并以“g”结尾的行,我写道:

cat input.txt | awk '/^a/' | awk '/g$/{print $0}'

如何组合正则表达式^ag$能够仅使用 的一个实例awk

答案1

只需使用一个匹配开始和结束的正则表达式:

awk '/^a.*g$/' input.txt

或者,如果您确实想使用两个,可以将它们组合起来&&

awk '/^a/ && /g$/' input.txt

答案2

不需要 awk,只需 grep:

grep "^a.*g$" input.txt

答案3

为了使答案尽可能通用,使用,这是执行所需操作的另一种方法,其中字符串被传递为从命令行。

本示例中嵌入了演示测试数据。

使用脚本

#!/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 变量的一部分逐字传递。

相关内容