Solaris上でsedを使って次の行を削除する方法

私はファイル内で一致するパターンを見つけてsedを使って削除しようとしています 次の行のみ。

Ex。

Location
New York <---- delete
USA

Location
London <---- delete
UK

私は sed '/ Location/{n; d} 'はLinux上で動作しますが、solarisでは動作しませんでした。

ありがとう。

4
Solarisの結果は何ですか?
追加された 著者 brandizzi,

3 答え

あなたの他のsedに関する質問で私が述べたように、Solarisは古い学校であり、手持ちが必要です(別の言い方をする必要があります)。

必要なのは追加の ';'だけです。 `d '文字の後に置かれたchar

sed '/Location/{n; d;}'

より一般的には、 {...} の中に改行することができるものは、セミコロンの区切り文字が1行に丸められているときに必要です。しかし、Linuxでは可能な限り 'a'、 'i'、 'c'コマンドを1行にまとめることはできません。

Solaris標準のsedでは、 'a'、i '、' c 'コマンドの後ろに空白やタブをつけずに、末尾に' \ 'を置く必要があります。 \ \ \ \

Solarisの新しいインストールでは、/usr/xpg4/bin/sed がインストールされている可能性があります。試す

/usr/xpg4/bin/sed '/Location/{n; d}' 

運が良ければ、ショートカット構文をサポートします。私はこれをテストするために、いかなるsolarisマシンにもアクセスすることはできません。

最後にそれがうまくいかない場合、Linuxから慣れ親しんでいるような sed を持つGNUツールのパッケージがインストールできます。 GNUツールがすでにインストールされているか、インストール可能かどうかについては、sys-adminsに問い合わせてください。私はgnuのどのバージョンが "リラックス"構文をサポートするようになったのかわからないので、テストしなくても修正されると仮定しないでください:-)

私はこれが役立つことを願っています

P.S. Welcome to StackOverflow and let me remind you of three things we usually do here: 1) As you receive help, try to give it too, answering questions in your area of expertise 2) Read the FAQs, http://tinyurl.com/2vycnvr , 3) When you see good Q&A, vote them up by using the gray triangles, http://i.imgur.com/kygEP.png , as the credibility of the system is based on the reputation that users gain by sharing their knowledge. Also remember to accept the answer that better solves your problem, if any, by pressing the checkmark sign , http://i.imgur.com/uqJeW.png

6
追加された

現在の行に次の行を追加して、 Location 以外の行をすべて削除することができます。

$ cat text 
Location
New York <---- delete
USA

Location
London <---- delete
UK
$ sed '/Location/{N;s/Location.*$/Location/;}' text
Location
USA

Location
UK

私はここにSolarisを持っていないので、これが動作するかどうかを知りたいと思います。

0
追加された

このAWKソリューションはあなたに適していますか?

[jaypal~/temp]$ cat a.txt 
Location
New York <---- delete 
USA

Location
London <---- delete
UK

空の行を保存するように更新 -

!NF is used to preserve the blank lines. It means, if the Number of Fields is = 0 then just print the line. NF is an in-built variable which keeps track of number of fields in a record. If we encounter a blank line, we skip the rest of the processing and go to the next line.

!/Location/ will print the lines. This is to preserve the lines which are not followed by Location. Printing is an implicit action in AWK whenever the pattern is true.

3番目のパターン/アクションは、RegEx /Location/と一致する行を印刷する場所です。行を印刷するだけでなく、次の行を効果的に削除して印刷するgetlineを2回実行します。

[jaypal~/temp]$ awk '!NF{print;next}; !/Location/; /Location/{print;getline;getline;print}' INPUT_FILE
Location
USA

Location
UK
0
追加された