最初の列のテキストにのみ作業しますか? [コピー]

最初の列のテキストにのみ作業しますか? [コピー]

入力例:

[email protected] [email protected],[email protected]

出力例:

[email protected] [email protected],[email protected]

したがって、「通常の」状況では、次のことが明らかに簡単です。

sed 's/.com/.org/g'

しかし、明らかに、この場合は、最初の列のサフィックスにのみ作業したいと思いますが、2番目の列は変更されずに維持されることを望みます。

私はあなたがどんなツールを提案しても構いません。しかし、私は追加のインストールなしで標準のLinuxで利用できることを好みます(つまり、またはsed同じawkことがperl望ましいでしょうbobsobscuretoolthatneedsinstalling)。

ベストアンサー1

.comの最初の項目だけに置き換えるには、.orgsed演算子のデフォルトの動作だけが必要ですs///。そのフラグを使用しないでくださいg

$ sed 's/.com/.org/' file 
[email protected] [email protected],[email protected]

最初のカンマで定義されたフィールドのみを変更して、最初のフィールドが行の.com別の場所に表示されても変更されていないままにしたい場合は、次のようにします。

$ perl -pe 's/^(\S+)\.com/$1.org/' file 
[email protected] [email protected],[email protected]

または、部分文字列として表示される場合com(たとえば)、foo.common.netより安全です。

$ perl -pe 's/^(\S+)\.com\b/$1.org/' file 
[email protected] [email protected],[email protected]

またはGNU sedから:

$ sed -E 's/^(\S+)\.com\b/\1.org/' file 
[email protected] [email protected],[email protected]

または移植可能(最初のフィールドが最初のフィールドによって定義されていると仮定)スペースタブまたは他のスペースの代わりに):

$ sed -E 's/^([^ ])\.com /\1.org /' file 
[email protected] [email protected],[email protected]

おすすめ記事