我们说我有以下输入:
CH12
CH23au
RCH34
CH99de
ZE33a
CH88aude
CHa
我希望输出为:
CH12au
CH23au
RCH34
CH99deau
ZE33a
CH88aude
CHaau
根据规则,该行必须以' CH'而且没有模式' au'
我将如何做到这一点?
我想我必须使用sed?或者awk?
答案 0 :(得分:3)
这是一个简单的Awk脚本,它在没有au的行的开头查找CH。最终1
是“打印所有输入行”的常用习惯用法,$0
是当前输入行。
awk '/^CH/ && ! /au/ { $0 = $0 "au" }1' file
如果你想在外部变量中使用后缀,则需要进行轻微的重构。
awk -v suf="au" '/^CH/ && $0 !~ suf { $0 = $0 suf } 1' file
答案 1 :(得分:2)
这可能适合你(GNU sed):
sed '/^CH/{/au/!s/$/au/}' file
专注于从CH
开始的行,如果他们不包含au
,请附加行。
答案 2 :(得分:1)
使用sed:
sed '/au/!s/^CH\(.*\)/CH\1au/' file
/au/!
:不包含au
s
:替换^CH
以CH
\(.*\)
后跟任何字符(使用\(
\)
CH\1au
将匹配模式替换为CH
,后跟捕获的字符,然后结束au
答案 3 :(得分:0)
你可以试试这个:
awk '
{
if(substr($0, 0, 2) == "CH")
{
if(index($0, "au") == 0)
printf("%sau\n",$0)
else
print $0
}
else
print $0
}' file