Shell-Script

如何從特定字元串中剪切每一行?

  • January 30, 2016

輸入.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

每次在行中找到 Apple 時,如何使用 nawk 或 sed 剪切前導部分?

我在 Solaris 10 中使用 KSH。

@cuonglm 的評論說明瞭如何做到這一點sed

sed -e 's/.*\(Apple\)/\1/' input.txt

您也可以考慮使用 good old grep

grep -o 'Apple.*' input.txt

警告 1 - 我手邊沒有任何 solaris,因此可能是 solarisgrep沒有-o選項。YMMV。

警告 2 - 如果您的輸入文件的行根本不包含任何Apples,那麼這些將根本不會出現在輸出中。不確定這是否是您想要的行為。如果沒有,那麼sed答案就足夠了。

您要求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

純殼

引用自:https://unix.stackexchange.com/questions/258597