Bash Shell sed命令
我有paths.txt,比如:Bash Shell sed命令,bash,shell,sed,tr,Bash,Shell,Sed,Tr,我有paths.txt,比如: pathO1/:pathD1/ pathO2/:pathD2/ ... pathON/:pathDN/ 如何在每个PathX/之后“sed”插入“*” 剧本是: while read line do cp $(echo $line | tr ':' ' ') done < "paths.txt" 读取行时 做 cp$(echo$行| tr':'') 完成
pathO1/:pathD1/
pathO2/:pathD2/
...
pathON/:pathDN/
如何在每个PathX/之后“sed”插入“*”
剧本是:
while read line
do
cp $(echo $line | tr ':' ' ')
done < "paths.txt"
读取行时
做
cp$(echo$行| tr':'')
完成<“path.txt”
替换为:
while read line
do
cp $(echo $line | sed 's/:/* /1')
done < "paths.txt"
读取行时
做
cp$(echo$行| sed's/:/*/1')
完成<“path.txt”
读取行时
做
path=`echo“$line”| sed's//://g'`
cmd=“cp$path”
echo$cmd
eval$cmd
完成<“/path.txt”
这似乎是一个与您之前提出的问题类似的问题:
在应用tr之前,只需使用删除额外“*”的技巧,如:
cp $(echo $line | sed 's/\*//1' | tr ':' '* ')
使用纯壳
while IFS=: read -r p1 p2
do
cp $p1 "$p2"
done < file
而IFS=:read-rp1 p2
做
cp$p1“$p2”
完成<文件
快速且肮脏的awk一个无回路的衬里完成工作:
awk -F: '$1="cp "$1' paths.txt
这将输出:
cp /home/Documents/shellscripts/Origen/* /home/Documents/shellscripts/Destino/
cp /home/Documents/shellscripts/Origen2/* /home/Documents/shellscripts/Destino2/
...
如果要执行cmds,请执行以下操作:
awk -F: '$1="cp "$1' paths.txt|sh
我说它快而脏,因为:
- 格式必须为
path1:path2
- 路径不能包含特殊字母(如空格)或
:
tr
中不能使用多个字符。为此,您需要sed
或另一个。还有,你到底想做什么cp$line$line带有*
?感谢fedorqui,我修复了将“tr”替换为“sed”的问题:cp$(echo$line | sed's/:/*/1)感谢您的回复。我试图从path1中删除“*”,以便获得:path1:path2而不获得path1/*:path2我仍然不太清楚您想要什么。您可以尝试将-F:
更改为-F'\*:'
并尝试一下。但我没有测试@user3228279I要从paths.txt中删除“*”(手动写入文本文件pathx/:pathDX/)并使用“sed”命令在每个原始路径的最后一个插入“*”。Thankscp$(echo$行| sed's/:/*/1')
awk -F: '$1="cp "$1' paths.txt|sh