Bash AWK还是Sed,还是一起?

Bash AWK还是Sed,还是一起?,bash,shell,sed,awk,Bash,Shell,Sed,Awk,我想我有一个sed或awk问题。我试图从bash脚本操作配置文件,但找不到正确的方法 我的配置文件中有以下内容: bla.update( {'test': {'tag': 'twenty', 并希望将其替换为: bla.update({ 'test': {'tag': 'twenty', 我尝试了各种sed&awk教程,但找不到 我想这一定不难,但我卡住了,请帮帮我 有些是这样的: awk 'f {sub(/{/,x);f=0} /bla.update/ {$0=$0 "{";f=1}1'

我想我有一个sed或awk问题。我试图从bash脚本操作配置文件,但找不到正确的方法

我的配置文件中有以下内容:

bla.update(
{'test': {'tag': 'twenty',
并希望将其替换为:

bla.update({
'test': {'tag': 'twenty',
我尝试了各种sed&awk教程,但找不到

我想这一定不难,但我卡住了,请帮帮我

有些是这样的:

awk 'f {sub(/{/,x);f=0} /bla.update/ {$0=$0 "{";f=1}1'
bla.update({
'test': {'tag': 'twenty',
它搜索
bla.update
,然后在末尾添加
{
,并设置标志
f=1
如果设置了标志
f
,则从行首移除
{
,并清除标志。

一些类似于:

awk 'f {sub(/{/,x);f=0} /bla.update/ {$0=$0 "{";f=1}1'
bla.update({
'test': {'tag': 'twenty',
它搜索
bla.update
,然后在末尾添加
{
,并设置标志
f=1

如果设置了标志
f
,则从行的开头删除
{
,并清除标志。

这里尝试使用
sed

sed 'N;s/(\s*\n\s*{/({\n/g' file
样本输入:

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

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

下面是使用
sed

sed 'N;s/(\s*\n\s*{/({\n/g' file
样本输入:

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

bla.update({
'test': {'tag': 'twenty',
sed':a;N;$!ba;s/(\N{/({\N/g'

适用于我

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


适用于我

使用GNU awk,因此您可以使用
-v RS='\0'
一次性读取整个文件(也适用于其他一些awk):

对于其他AWK,您可以使用输入文件中不存在的其他字符,例如control-C或类似字符,而不是上面的记录分隔符
\0
,或者您可以:

$ awk -v RS= -v ORS='\n\n' '{gsub(/\n{/,"{\n")}1' file
bla.update({
'test': {'tag': 'twenty',
但它会将连续的空行序列压缩为一个空行,并在文件末尾添加一个尾随空行(如果没有)

最后,您可以使用任何awk从一次读取一行的整个文件内容构造一个字符串,然后在结尾部分对该字符串进行操作:

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

使用GNU awk,您可以使用
-v RS='\0'
一次性读取整个文件(也可以使用其他一些awk):

对于其他AWK,您可以使用输入文件中不存在的其他字符,例如control-C或类似字符,而不是上面的记录分隔符
\0
,或者您可以:

$ awk -v RS= -v ORS='\n\n' '{gsub(/\n{/,"{\n")}1' file
bla.update({
'test': {'tag': 'twenty',
但它会将连续的空行序列压缩为一个空行,并在文件末尾添加一个尾随空行(如果没有)

最后,您可以使用任何awk从一次读取一行的整个文件内容构造一个字符串,然后在结尾部分对该字符串进行操作:

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

一般模式只是将大括号移动到前一行吗?是的,这是唯一的事情。一般模式只是将大括号移动到前一行吗?是的,这是唯一的事情。酷!成功了。谢谢!酷!成功了。谢谢!