2017-10-02 7 views
-1

2つのフィールドを含むファイルがあります。最初のフィールドには整数が含まれていてもなくてもかまいません。それが整数を含んでいて、ドットが整数に続く場合、私は第2フィールドの一部を操作したいと思います。したがって、例として:sedを使用して整数を含む行を置き換える方法

301. 301+Num+Ord   # Change this one 301+Num+Card 
100. 100+Num+Ord   # Change this one 100+Num+Card 
3'üncü 3+Num+Ord   # DONOT CHANGE THIS ONE 
48.7 48.7+Num+Real  # DONOT CHANGE THIS ONE EITHER . is not at the end 
24  24+Num+Card   # DONOT CHANGE THIS ONE No dot 
4.  4+Num+Ord   # Change this one 4+Num+Card 
.  .+Punct    # DONOT CHANGE THIS ONE 

私は正規表現の知識が非常に限られているので、私はそれを作れませんでした。あなたが私を助けることができれば非常に感謝しています。ありがとう

+0

のために簡潔な、テスト可能なサンプルの入力と別の期待される出力を格納するための[編集]あなたの質問をします。 See [ask]。 –

+0

混乱を避けるために、入力ファイルと期待される出力として別々に投稿する必要があります。そして、あなたが試みたものは何でも追加して、無料でコード全体を尋ねるように描写してはいけません。何かが詰まった... – Sundeep

答えて

1

あなたはawkコマンドに従ってみてください。これがあなたに役立つかどうか教えてください。 変更する必要がある場合に備えて、2番目の列の次のテキストがどれであるかを教えてくれていないので、私は単にテスト文字列を取ります。

awk '($1 ~ /[0-9]+\.$/){sub("Ord","Card",$2)} 1' OFS="\t" Input_file 

説明:awkので$1がここに列1を表しスペースとしてデフォルトの区切り文字であります。ここで$1 ~ /[0-9]+\./$をチェックしています。第1列に数字がある場合は、最後にDOTが続きます(\.はDOTの特殊な意味を取り除くためにエスケープシーケンスを使用していることを意味します)。そうであればordと置き換えますcardsub(代替)ユーティリティawkとして使用します。次に1は、私がここで条件をTRUEにしていることを意味しています。ここでは言及とアクションがないので、デフォルトではアクションプリントが行われます。

+0

実際に私はコメントとしてそれを入れた。 #で始まる部分は、ファイルの一部ではないという私のコメントです。ご覧のように、私がラインを変更するたびに、OrdをCardに置き換え、残りを同じに保ちます – zwlayer

+1

@ RavingerSingh13 Yupp。それは実際に働いた!ありがとう – zwlayer

+0

実際には小さな問題があります。操作する前に、フィールドはタブで区切られていますが、編集時にはスペースで区切られているようですね。どうすればそれを変更することもできますか? @ RavinderSingh13 – zwlayer

0

OPはsedのよう

sed -E '/^[0-9]+\.[[:space:]]/!b;s/(^.*[[:space:]]+)([^[:space:]]*$)/\1Change this one/' infile 
関連する問題