Bashでawkとsedコマンドを結合する方法

Bashでawkとsedコマンドを結合する方法

Rev_rationとsyncという3つのフィールド名を持つファイルがあります。ここでは、(コロンで区切られた)次のようになります。

##Increase 
JOe:4.8:7

##Check as per revision 67
jonny:[5:9]:[7:0]
##Check as per revision 56
Salman:q[0:234]:5

最初は角かっこ内の : を ! に変更しました。 2番目にAWKを実行します。第三に、交換したい!角かっこ内にあります。以下のコードを試しています。

#!/bin/bash
sed 's/\([[0-9]\+\)!\([0-9]\+]\)/\1:\2/g' t5 >> t6
awk -F: '/^$/ /^#/ {c=$0; sub(/#+/,"", c); next} 
                {print $1,$2,"- message", "\"" c "\""}' t6 >> t7
sed 's/\([[0-9]\+\)!\([0-9]\+]\)/\1:\2/g' t7 >> t8

Getting syntax error

上記のコードはうまく機能しますが、空行を無視することはできません。

入力ファイルから空白行を削除する必要があります。

希望の出力

JOe:4.8:7 - message "Increase "
jonny:[5:9]:[7:0] - message "Check as per revision 67"
Salman:q[0:234]: - message "Check as per revision 56"

3つのコマンドをすべて組み合わせる方法と空行を削除する方法..上記のコードを使用して問題を解決する方法

ベストアンサー1

- で区切られたフィールドを使用して実際に何もしないように見えるので、:で始まる行に集中してその##行からテキストを選択し、次の行にテキストを挿入できます。

以下のみを使用してくださいsed

$ sed '/^$/d; /^##/{ s///; h; d; }; G; s/\n\(.*\)/ - message "\1"/' file
JOe:4.8:7 - message "Increase "
jonny:[5:9]:[7:0] - message "Check as per revision 67"
Salman:q[0:234]:5 - message "Check as per revision 56"

この式は以下を使用して空sed行を削除します。/^$/d次に、それに続くすべてのテキストを##予約済みスペースに保存します(h初期スペースを削除してから、予約済み##スペースに保存されている可能性があるすべての内容を置き換えます)。空白以外の行またはで始まる行の場合は、##予約済みスペースにテキストを追加し、追加されGたテキストの前に付き、で終わるよう - message "に変更します"

おすすめ記事