Shell-Script
如何從特定字元串中剪切每一行?
輸入.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,因此可能是 solaris
grep
沒有-o
選項。YMMV。警告 2 - 如果您的輸入文件的行根本不包含任何
Apple
s,那麼這些將根本不會出現在輸出中。不確定這是否是您想要的行為。如果沒有,那麼sed
答案就足夠了。
您要求
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
純殼