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 "
に変更します"
。