以下は、「word」を削除して「word」を含むすべての項目を選択して、「word」を含むフルテキスト行を印刷するスクリプトです。
sed -ne 's/word//p' file.txt >> newfile.txt
「単語」が最初に表示された後にテキスト行のみを印刷し、印刷された行から「単語」を削除するにはどうすればよいですか?
私はOSXを使用しています。
以下はサンプルテキストです。
Blalala
'Omfoem From
balanf
word I want this output
word Not this output
Omfoem527
これが私の予想結果です。
I want this output
更新:必要なタスクを実行するスクリプトは次のとおりです。
sed -n 's/^.*word //p' file.txt > temp.txt
sed -n '1p' temp.txt >> newfile.txt
rm temp.txt
最初の行は「単語」を削除した後、「単語」を含むテキストの行全体を印刷し、temp.txtファイルから「単語」が表示されるすべての項目を選択します。また、「単語」の前に別のテキストが来る場合に備えて^.*を追加しました。
2行目はtemp.txtファイルの最初の行だけをnewfile.txtに印刷し、3行目はtemp.txtファイルを削除します。
最も効率的ではありませんが、動作します。
答え1
この試み、
sed -n '/word/{n;p;q}' file
- n -> パターン空間の次の入力行を読み取るか追加します。
- p ->現在のパターンスペースを印刷します。
- q ->追加の入力を処理せずに直ちにsedスクリプトを終了します。最初の項目のみ...
答え2
1つのファイルしか処理しないと仮定すると、そしてこのようなパターンが表示されることがありますその行で一度だけ、次が動作します:
awk -F"word" 'NF>1 {print $2; exit}' file
次に、「単語」パターンをフィールド区切り文字として使用し、これらの「フィールド」が複数あることを確認します。その場合は、2番目のフィールド(次のテキストと同じ)を印刷しword
て実行を停止します。
複数のファイルを処理するには、次のものを使用できます。
awk -F"word" 'NF>1 {print $2; nextfile}' file1 file2 ...
ただし、これは移植性が低下します(mawk
つまり、適用できません)。