Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在脚本中使用awk命令保存永久性修改_Awk - Fatal编程技术网

如何在脚本中使用awk命令保存永久性修改

如何在脚本中使用awk命令保存永久性修改,awk,Awk,如何使用awk命令对文件进行永久性修改?我一直在使用: awk '/'"'"'test'"'"' =>./{c++}(c==2){sub("'"'"'test'"'"' =>.","'"'"'test'"'"' => '"'"'test1'"'"',")}1' testfile 我一直在使用上述命令进行临时更改,以立即打开更改。但是我想在脚本文件中使用它,并对文件进行永久性更改,类似于sed-I在它作为dup关闭之前,至少让我们清理一下代码。这: awk '/'"'"'tes

如何使用
awk
命令对文件进行永久性修改?我一直在使用:

awk '/'"'"'test'"'"' =>./{c++}(c==2){sub("'"'"'test'"'"' =>.","'"'"'test'"'"' => '"'"'test1'"'"',")}1' testfile

我一直在使用上述命令进行临时更改,以立即打开更改。但是我想在脚本文件中使用它,并对文件进行永久性更改,类似于
sed-I

在它作为dup关闭之前,至少让我们清理一下代码。这:

awk '/'"'"'test'"'"' =>./{c++}(c==2){sub("'"'"'test'"'"' =>.","'"'"'test'"'"' => '"'"'test1'"'"',")}1' testfile
非常难读。我假设所有那些
“”
都试图在代码中加入单引号。如果是这样的话,为了提高清晰度,并在脚本存储在文件中时起作用,请对每个引号使用八进制表示法
\047

awk '/\047test\047 =>./{c++} (c==2){sub("\047test\047 =>.","\047test\047 => \047test1\047,")}1' testfile
现在对作为
sub()
的第一个参数的regexp使用regexp分隔符:

还有其他一些可能的改进,包括在替换中使用backreference而不是硬编码原始的
sub()
字符串,以及使用
match()
,这样就不需要在脚本的条件部分测试相同的regexp,然后在
sub()
中再次测试(对于第三个要匹配的参数(),使用GNU awk)可能就是您所需要的:

awk 'match($0,/(.*\047test\047 =>.)(.*)/,a){c++} c==2{$0=a[1] "\047test1\047" a[2]} 1' testfile

但是如果没有示例输入输出,我们无法确定-如果您需要更多帮助,请发布一个带有示例输入/输出的新问题。

在作为dup结束之前,让我们至少清理一下您的代码。这:

awk '/'"'"'test'"'"' =>./{c++}(c==2){sub("'"'"'test'"'"' =>.","'"'"'test'"'"' => '"'"'test1'"'"',")}1' testfile
非常难阅读。我假设所有这些
““
都试图在代码中加入单引号。如果是这样,为了提高清晰度,并且当脚本存储在文件中时会起作用,请对每个单引号使用八进制表示法
\047

awk '/\047test\047 =>./{c++} (c==2){sub("\047test\047 =>.","\047test\047 => \047test1\047,")}1' testfile
现在对作为
sub()
的第一个参数的regexp使用regexp分隔符:

还有其他一些可能的改进,包括在替换中使用backreference而不是硬编码原始的
sub()
字符串,以及使用
match()
,这样就不需要在脚本的条件部分测试相同的regexp,然后在
sub()
中再次测试(对于第三个要匹配的参数(),使用GNU awk)可能就是您所需要的:

awk 'match($0,/(.*\047test\047 =>.)(.*)/,a){c++} c==2{$0=a[1] "\047test1\047" a[2]} 1' testfile

但是如果没有示例输入/输出,我们无法确定-如果您想获得更多帮助,请发布一个带有示例输入/输出的新问题。

我已经看过了。对于该问题的回答并不准确。无论Q的细节如何,前两个答案都提供了使用
awk时保存文件所需的所有信息。当您搜索
[awk]在本地
,已经有242个Q/A。因此,这是一个重复的Q。在这里发布更多Q之前,请先阅读。祝你好运。我已经看过了。对于这个问题的回答并不准确。无论Q的细节如何,前两个答案都有关于使用
awk
时将文件保存在本地的所有必要知识。Wh如果您搜索
[awk]in place
,已经有242个Q/A。因此这是一个重复的Q。请在这里发布更多Q之前阅读。祝您好运。