输入.txt:
john_Apple01_xyz_1
john_Fruit_Apple01_abc_c1
john_Apple21_trs_1
john_Fruit_Apple21_efg_1
john_Fruit_Apple21_tefg_1
期望的输出:
Apple01_xyz_1
Apple01_abc_c1
Apple21_trs_1
Apple21_efg_1
Apple21_tefg_1
每次在行中找到苹果时,如何使用 nawk 或 sed 来剪切前导部分?
我在 Solaris 10 中使用 KSH。
答案1
@cuonglm 的评论说明了如何使用以下方法执行此操作sed
:
sed -e 's/.*\(Apple\)/\1/' input.txt
您也可以考虑使用好旧的grep
:
grep -o 'Apple.*' input.txt
警告 1 - 我手边没有任何Solaris,所以Solaris 可能grep
没有这个-o
选项。 YMMV。
注意事项 2 - 如果您的输入文件中有根本不包含任何Apple
s 的行,那么这些行根本不会出现在输出中。不确定这是否是您想要的行为。如果没有,那么sed
答案就足够了。
答案2
你要求nawk
或sed
。正如你提到的ksh
,为什么不做一个纯 shell 版本呢?
以下命令在任何兼容 POSIX 的 shell 中运行:
p="Apple"
while read line ; do
case $line in
(*$p*) echo $p${line#*$p};;
esac
done <<!
john_Apple01_xyz_1
john_Fruit_Apple01_abc_c1
john_Apple21_trs_1
john_Fruit_Apple21_efg_1
john_Fruit_Apple21_tefg_1
!
这导致:
Apple01_xyz_1
Apple01_abc_c1
Apple21_trs_1
Apple21_efg_1
Apple21_tefg_1
纯贝壳