[英]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.