特定の文字列で各行を切り取る方法は?

特定の文字列で各行を切り取る方法は?

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

あなたは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

純粋な殻

関連情報