入力.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
シェルバージョンを作ってみてはいかがでしょうか?
次のコマンドは、POSIX 互換シェルで実行されます。
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
純粋な殻