尝试从一堆文本文件中删除字符串,并在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
答案 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
这有点危险,所以请先测试一下示例文件。