Bash 复制同一文件中的字符串

Bash 复制同一文件中的字符串,bash,sed,replace,find,Bash,Sed,Replace,Find,如何在条件下复制同一文件中的字符串 我有很多这样的文件: <?php /** * Message. * * NOTE: this file must be saved in UTF-8 encoding. */ return [ 'To copy' => '', 'No to copy' => 'Not to copy as already filed', ]; 希望我清楚。我知道如何在文件中sed,查找和替换,但这是我第一次遇到这种特殊情况 感谢您的

如何在条件下复制同一文件中的字符串

我有很多这样的文件:

<?php
/**
 * Message.
 *
 * NOTE: this file must be saved in UTF-8 encoding.
 */
return [
    'To copy' => '',
    'No to copy' => 'Not to copy as already filed',
];
希望我清楚。我知道如何在文件中
sed
查找
替换
,但这是我第一次遇到这种特殊情况

感谢您的帮助。

bash+sed方法:

创建
replace_empty.sh
(测试名称)bash脚本:

#!/bin/bash
for f in /tmp/test/*.php 
do 
    sed -i -E "s/^([[:space:]]*)('[^']+') => '[[:space:]]*',\$/\1\2 => \2,/g" $f
done
用实际路径替换文件路径
/tmp/test/*.php

sed选项:

-i
-就地修改文件

-E
-允许扩展正则表达式

('[^']+')
-捕获密钥名

\1
\2
分别指向第一个和第二个捕获的组


用法:

bash replace_empty.sh
bash+sed方法:

创建
replace_empty.sh
(测试名称)bash脚本:

#!/bin/bash
for f in /tmp/test/*.php 
do 
    sed -i -E "s/^([[:space:]]*)('[^']+') => '[[:space:]]*',\$/\1\2 => \2,/g" $f
done
用实际路径替换文件路径
/tmp/test/*.php

sed选项:

-i
-就地修改文件

-E
-允许扩展正则表达式

('[^']+')
-捕获密钥名

\1
\2
分别指向第一个和第二个捕获的组


用法:

bash replace_empty.sh

您也可以直接将
/tmp/test/*.php
传递到
sed
而不是使用for循环。@Sundeep,我看到了“长”行(如果有长文件路径)。我得出了一个更具可读性的变体。此外,我们可以添加一些其他处理以及sed替换哦,好的。。。但一定要引用变量
“$f”
非常感谢,您刚刚错过了结尾的逗号;)
sed-i-E“s/^([[:space:]]*)(“[^']+]”=>“[:space:]*”,\$/\1\2=>\2,/g“$f
您还可以直接将
/tmp/test/*.php
传递到
sed
而不是使用for循环。@Sundeep,我看到了那条“长”行(如果文件路径很长)。我得出了一个更具可读性的变体。此外,我们可以添加一些其他处理以及sed替换哦,好的。。。但一定要引用变量
“$f”
非常感谢,您刚刚错过了结尾的逗号;)
sed-i-E“s/^([[:space:][]*)(“[^']+”)=>“[[:space:][]*”,\$/\1\2=>\2,/g“$f