0

sed または awk の質問があると思います。bash スクリプトから構成ファイルを操作しようとしていますが、正しい方法が見つかりません。

私の設定ファイルには次のものがあります。

bla.update(
{'test': {'tag': 'twenty',

そしてそれを次のように置き換えたい:

bla.update({
'test': {'tag': 'twenty',

あらゆる種類の sed & awk チュートリアルを試しましたが、見つかりません。

そんなに難しくないと思いますが、行き詰まっています。助けてください!!

4

4 に答える 4

2

GNU awk を使用すると、一度にファイル全体を読み取ることができます-v RS='\0'(他の awk でも動作します):

$ awk -v RS='\0' -v ORS= '{gsub(/\n{/,"{\n")}1' file
bla.update({
'test': {'tag': 'twenty',

他の awks では、\0上記のレコード区切り文字の代わりに、入力ファイルに存在しない他の文字 (control-C など) を使用できます。

$ awk -v RS= -v ORS='\n\n' '{gsub(/\n{/,"{\n")}1' file
bla.update({
'test': {'tag': 'twenty',

ただし、連続する空白行のシーケンスを単一の空白行に圧縮し、末尾の空白行がまだ存在しない場合はファイルの最後に追加します。

最後に、任意の awk を使用して一度に 1 行ずつ読み取ったファイルの内容全体から文字列を作成し、END セクションでその文字列を操作できます。

$ awk '{s=s $0 ORS} END{gsub(/\n{/,"{\n",s); printf "%s",s}' file
bla.update({
'test': {'tag': 'twenty',
于 2013-10-08T19:39:08.257 に答える
1

これが使用する試みですsed

sed 'N;s/(\s*\n\s*{/({\n/g' file

サンプル入力:

bla.update(
{'test': {'tag': 'twenty',

出力:

bla.update({
'test': {'tag': 'twenty',
于 2013-10-08T19:19:26.310 に答える
1

このようないくつか:

awk 'f {sub(/{/,x);f=0} /bla.update/ {$0=$0 "{";f=1}1'
bla.update({
'test': {'tag': 'twenty',

フラグを検索して最後にbla.update追加し、フラグを設定します。 フラグが設定されている場合は、行頭から削除し、フラグをクリアします。{f=1f{

于 2013-10-08T19:15:09.977 に答える