簡體   English   中英

AWK或Sed,還是在一起?

[英]AWK or Sed, or together?

我想我有一個sed或awk問題。 我正在嘗試從bash腳本中操作配置文件,但是我找不到正確的方法來執行此操作。

我的配置文件中包含以下內容:

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

並希望將其替換為:

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

我嘗試了各種sed和awk教程,但找不到。

我想這一定不太難,但是我被困住了,請幫助我!

sed ':a;N;$!ba;s/(\\n{/({\\n/g'

為我工作

使用GNU awk,因此您可以使用-v RS='\\0'一次讀取整個文件(也可以與某些其他awks一起使用):

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

通過其他awk,您可以使用輸入文件中不存在的其他一些字符,例如control-C或類似字符,而不是上面的Record Separator代替\\0 ,或者您可以執行以下操作:

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

但是它將連續的空行序列壓縮為單個空行,如果文件末尾沒有空行,則在文件末尾添加尾隨的空行。

最后,您可以使用任何awk從整個文件內容一次讀取一行來構造一個字符串,然后在END部分中對該字符串進行操作:

$ awk '{s=s $0 ORS} END{gsub(/\n{/,"{\n",s); printf "%s",s}' file
bla.update({
'test': {'tag': 'twenty',

一些像這樣:

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

它搜索bla.update然后添加{在端,並設置標志f=1如果flag f設置然后刪除{從線和清除標志的開始。

這是嘗試使用sed

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

輸入樣例:

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

輸出:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM