
次の形式のファイルがあります。
Whatever1
Whatever2
Whatever3
binaries=(
text1
bin2
ohhh3
)
Whatever4
Whatever5
Whatever6
binaries=(
内部ラインをコマンド出力に置き換える必要があります。)
次のコマンドを使用して、次のブロックを選択できますsed -n -e '/binaries=(/,/)/p' filename
。
binaries=(
text1
bin2
ohhh3
)
または、次の使用をお勧めしますawk '/binaries/,/)/{if(!/binaries|)/)print}' filename
。
text1
bin2
ohhh3
しかし、元のファイルを再構築する必要がありますが、どのように進むべきかわかりません。
答え1
GNUの使用sed
:
sed '/binaries=(/,/)/{
//!d
/)/e uname
}'
あなたのコマンドに置き換えてくださいuname
。
答え2
たとえば、次のように awk を使用します。
awk '
f && /)/ { f=0 }
!f
!f && /binaries=\(/ { f=1 ; p=1 }
p { system ("your_command") ; p=0 }
'
ここで、「your_command」は置換を定義します。
説明:このフラグはf
ステートマシンを制御します。設定されている場合は、交換する必要があるブロックにあります。開始パターンと終了パターンが一致すると、それに応じてフラグが変更されます。ブロック内にある間、システムコールが実行されます。このフラグはp
一度だけ印刷するために使用されます。
元のファイルを置き換えるには、新しいファイルを作成して元のファイルを上書きするか、awk
最新バージョンのGNUをオプションと一緒に使用します-i inplace
。