如何从特定字符串中剪切每一行?

如何从特定字符串中剪切每一行?

输入.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 - 如果您的输入文件中有根本不包含任何Apples 的行,那么这些行根本不会出现在输出中。不确定这是否是您想要的行为。如果没有,那么sed答案就足够了。

答案2

你要求nawksed。正如你提到的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

纯贝壳

相关内容