Man*_*nde 3 sed text-processing bash-script
我尝试编写一个脚本,在其中逐行读取文件。我应该用逗号 (,) 替换反斜杠 (\)。
输入文件如下:
1,2,3,WORKSTATION1\A,5
1,2,3,WORKSTATION2\B,5
1,2,3,WORKSTATION1\C,5
1,2,3,WORKSTATION1\D,5
1,2,3,WORKSTATION1\E,5
1,2,3,WORKSTATION1\F,5
1,2,3,WORKSTATION1\G,5
Run Code Online (Sandbox Code Playgroud)
我写的这段代码如下:
#!/bin/bash
cat $1 | while read -r line
do
ln=$(echo $line | xargs | sed 's/\\/,/g' )
echo $ln
done
echo Done!
Run Code Online (Sandbox Code Playgroud)
当我运行时./script.sh file.csv
,我得到以下输出:
1,2,3,WORKSTATION1A,5
1,2,3,WORKSTATION2B,5
1,2,3,WORKSTATION1C,5
1,2,3,WORKSTATION1D,5
1,2,3,WORKSTATION1E,5
1,2,3,WORKSTATION1F,5
1,2,3,WORKSTATION1G,5
Done!
Run Code Online (Sandbox Code Playgroud)
而我期望输出如下:
1,2,3,WORKSTATION1,A,5
1,2,3,WORKSTATION2,B,5
1,2,3,WORKSTATION1,C,5
1,2,3,WORKSTATION1,D,5
1,2,3,WORKSTATION1,E,5
1,2,3,WORKSTATION1,F,5
1,2,3,WORKSTATION1,G,5
Done!
Run Code Online (Sandbox Code Playgroud)
我也试过更换sed 's/\\/,/g'
用tr "\\" ","
,但它没有帮助。需要什么修改吗?
你有没有试过这个
# cat a.txt
1,2,3,WORKSTATION1\A,5
1,2,3,WORKSTATION2\B,5
1,2,3,WORKSTATION1\C,5
1,2,3,WORKSTATION1\D,5
1,2,3,WORKSTATION1\E,5
1,2,3,WORKSTATION1\F,5
1,2,3,WORKSTATION1\G,5
# sed -e 's/\\/,/g' a.txt
1,2,3,WORKSTATION1,A,5
1,2,3,WORKSTATION2,B,5
1,2,3,WORKSTATION1,C,5
1,2,3,WORKSTATION1,D,5
1,2,3,WORKSTATION1,E,5
1,2,3,WORKSTATION1,F,5
1,2,3,WORKSTATION1,G,5
Run Code Online (Sandbox Code Playgroud)
这是编写您尝试过的相同脚本的更好方法:
#!/bin/bash
while read -r line
do
echo "$line" | sed 's/\\/,/g'
done < "$1"
echo Done!
Run Code Online (Sandbox Code Playgroud)
当然,整个事情可以简化为
#!/bin/bash
tr '\\' , < "$1"
Run Code Online (Sandbox Code Playgroud)