linux - xargs echo `echo {} | sed ' s/pattern/replace/'` 不起作用,但每个循环都有效

标签 linux shell sed command xargs

我想做相当于:

for i in `ls -1`; do echo $i | mv $i `sed 's/profile/account/'`; done

xargs

ls -1 | xargs -I{} mv {} `echo {} | sed 's/profile/account/'`

但是反引号内管道后面的 sed 会被忽略。 有谁知道为什么会这样?

编辑:更多信息

根本问题只是在直接给定的模式替换中重命名文件(此处将 profile 替换为 account,但这可以通过对文件进行 for in 循环来解决。

我提出的问题是为什么以下内容不起作用。

ls -1 | xargs -I{} mv {} `echo {} | sed 's/profile/account/'`

为什么

`echo {} | sed 's/profile/account/'`

部分不返回替换的文件名,而是返回原始文件名。就好像 | 在反引号内不起作用。

以不同的方式写问题:

如果我有一个类似于名为 list.txt 的文件中的列表

profile1.txt
profile2.txt 

并且想要生成

account1.txt
account2.txt 

分别对每一行进行操作,以便我可以在其上运行命令。

cat list.txt | xargs -I{} echo `echo {} | sed 's/profile/account/'`

为什么命令返回:

profile1.txt
profile2.txt 

而不是将个人资料更改为帐户?

最佳答案

这可能适合你(GNU 并行):

parallel 'old={}; new=${old/profile/account}; echo mv $old $new' ::: *

检查后删除echo

关于linux - xargs echo `echo {} | sed ' s/pattern/replace/'` 不起作用,但每个循环都有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52912204/

相关文章:

java - 在 Linux 上安装 Java EE SDK 时出错

linux - linux下如何从字符串中过滤出需要的内容?

java - 使用 sshpass ssh 到远程主机并使用 java 获取结果

shell - 我如何让 Tcl 的 exec 运行一个命令,该命令的参数包含带空格的引号字符串?

linux - 如何使用sed或awk处理指定列的内容?

linux - 如何用另一个文件中的另一组替换一个文件中的一组字符串

linux - 无法在 Centos 7 上自动挂载 NFS 共享

php - 如何使用 PHP shell_exec 添加新用户到 Kamailio?

bash - 我可以将多个文件输出到 STDOUT 并单独处理它们吗?

regex - 为 Jenkins 作业解析 Bash 中的 Karma 覆盖率输出(脚本)