求助 关于 linux shell 编程输出的问题 echo 与 sed 结合使用字符串发生覆盖
- 0次
- 2021-07-08 10:59:06
- idczone
写了大概这么个东西,为了读 XML 文件并且加点东西:
#!/bin/sh
sed -n 's/.*>\(.*\)<\/name>/\1/p' test.xml|while read line
do
echo $line
echo $line:123456
done
结果输出时候单 echo $line 没有问题,但是第二个 echo , 123456 的部分覆盖掉了$line 的开头部分,求各位大大解答如何解决
test.xml 啥内容
test
[email&cat test.xml
test
[email&cat test.sh
sed -n 's/.*>\(.*\)<\/name>/\1/p' test.xml|while read line
do
echo $line
echo $line:123456
done
[email&./test.sh
test
test:123456
[email&
实测 ubuntu 正常
覆盖掉开头部分什么意思?
正常应该输出
test
test:123456
是不是因为 Windows CRLF 所以被 $line 里的 \r 干了?
echo 之前加一个 `line=${line%$'\r'}` 去掉 CR 就好了。
其实你完全用不着 sed :
```Bash
while IFS='' read -r -u 4 line; do
[[ $line =~ (.*) ]] || continue
printf '%s\n' "${BASH_REMATCH[1]}:123456"
done
```