SED没有删除文本

时间:2014-06-11 20:37:58

标签: bash shell sed

尝试从一堆文本文件中删除字符串,并在OSX Mavericks下的shell脚本中使用SED。

基本上,文本文件包含编码的换行符/回车符,这会使我的工作流程变得混乱,我想彻底摆脱它们。

在前面,我会说我是一名业余程序员,所以这个剧本可能会让受过训练的人看起来很痛苦。

#!/bin/bash
for f in `ls *.xml`; do
  sed '/
/d' $f > "${f/.xml/}".tmp1
done
rm *.xml

for f in `ls *.tmp1`; do
  sed '/
/d' $f > "${f/.tmp1/}".tmp2
done
rm *.tmp1

for f in `ls *.tmp2`; do
  sed '/</d' $f > "${f/.tmp2/}".tmp3
done
rm *.tmp2

for f in `ls *.tmp3`; do
  sed '/>/d' $f > "${f/.tmp3/}".xml
done
rm *.tmp3

1 个答案:

答案 0 :(得分:4)

无需使用临时文件:

for f in *.xml; do
    sed -e '/
/d; /
/d; /</d; />/d' "$f"
done

如果您发现输出正确,请在sed中添加-i选项,以启用就地编辑。

sed -i -e ...

此外,无需使用ls *.xml

Awk解决方案:

for f in *.xml; do
    awk '{gsub(/
/, " "); gsub(/
/, " "); gsub(/</, " "); gsub(/>/, " ")}1' "$f" > "$f".temp && cat "$f".temp > "$f" && rm "$f".temp
done

这有点危险,所以请先测试一下示例文件。