Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
Unix 使用通配符替换sed_Unix_Sed - Fatal编程技术网

Unix 使用通配符替换sed

Unix 使用通配符替换sed,unix,sed,Unix,Sed,如何使用sed执行以下替换 输入 所需输出 group_0 group_10 n_name n_name n_name n_name n_name n_name team_20 team_1 我尝试使用sed-I的s/n\u name*/n\u name/g,但它会根据您的输入数据删除n\u name之后的所有内容: sed -i 's:\(n_name\)_[[:digit:]]*:\1:g' sed -r 's/_[0-9]+//g' 见下一行: kent$ echo "group

如何使用sed执行以下替换

输入

所需输出

group_0 group_10 n_name n_name n_name n_name n_name n_name team_20 team_1

我尝试使用sed-I的s/n\u name*/n\u name/g,但它会根据您的输入数据删除n\u name之后的所有内容:

sed -i 's:\(n_name\)_[[:digit:]]*:\1:g'
sed -r 's/_[0-9]+//g'
见下一行:

kent$   echo "group0 group1 n_name_0 n_name_10 n_name_20 n_name_5 n_name_40 team0 team1"|sed -r 's/_[0-9]+//g'
group0 group1 n_name n_name n_name n_name n_name team0 team1
更新

为您的新输入更新

sed -r 's/(n_name)_[0-9]+/\1/g'
测试:

更新

我假设您希望在shell脚本中使用该行。因此,请参见下面的测试:

kent$  ls
test.txt

kent$  cat test.txt 
group_0 group_10 n_name_0 n_name_10 n_name_20 n_name_5 n_name_40 team_20 team_1

kent$  commandSed=$(sed -r 's/(n_name)_[0-9]+/\1/g' test.txt > out.txt)

kent$  ls
out.txt  test.txt

kent$  cat out.txt
group_0 group_10 n_name n_name n_name n_name n_name team_20 team_1
事实上,命令化的var在这里没有任何意义

如果您这样做:

kent$  commandSed=$(sed -r 's/(n_name)_[0-9]+/\1/g' test.txt)   
(不重定向到新文件)

如果您想在新文件和命令变量中同时使用输出,tee是您的朋友:

kent$  commandSed=$(sed -r 's/(n_name)_[0-9]+/\1/g' test.txt|tee out.txt)  

kent$  echo $commandSed                                                  
group_0 group_10 n_name n_name n_name n_name n_name team_20 team_1

kent$  cat out.txt 
group_0 group_10 n_name n_name n_name n_name n_name team_20 team_1

解决这个问题的办法很简单。找到这个了吗


我给了你一个详细的答复。这对你有帮助吗?第0组第10组第20组第1组。我看到了这个输出。字符串被一个类似于[]group\u 0 group\u 10 team\u 20 team\u 1的字符替换。这是我从你的脚本中得到的输出,似乎删除了n_名称。我正在运行$commandSed=“sed-r's/(n_name)[0-9]+/\1/g'”$用户路径。“test.txt>out.txt”;系统(已征用);@SantoshPillai你能复制并试一下我回答中的那句话吗,echo…| sed。。它给你什么输出?我如何使用它来修改我的文件$commandSed=exec(“sed-r's/(n_name)[0-9]+/\1/g'test.txt>new.txt”);太多删除n_name你知道这个的php语法吗?
kent$  commandSed=$(sed -r 's/(n_name)_[0-9]+/\1/g' test.txt)   
kent$  echo $commandSed 
group_0 group_10 n_name n_name n_name n_name n_name team_20 team_1
kent$  commandSed=$(sed -r 's/(n_name)_[0-9]+/\1/g' test.txt|tee out.txt)  

kent$  echo $commandSed                                                  
group_0 group_10 n_name n_name n_name n_name n_name team_20 team_1

kent$  cat out.txt 
group_0 group_10 n_name n_name n_name n_name n_name team_20 team_1
$commandSed ="sed -r 's/n_name_[0-9]*/un_cell/g' test.txt>out.txt";
system($commandSed);