自从切换到更好的管理系统后,我想删除每个源文件顶部的所有冗余日志。在Notepad ++中,我能够通过使用"替换文件"来实现结果。用空格替换匹配到\A(//.*\n)+
。然而,在Linux上,我没有这样的运气,我需要求助于' xargs'并且' sed'。
我使用的sed表达式是:
sed '1,/^[^\/]/{/^[^\/]/b; d}'
丑陋可以肯定,但似乎确实有用。
我遇到的问题是当我试图通过' xargs'为了提供我们系统中的所有源文件,我无法将输出重定向到“剥离”#39;文件,然后我打算复制原件。
我想要的是:
find . -name "*.com" -type f -print0 | xargs -0 -I file sed '1,/^[^\/]/{/^[^\/]/b; d}' "file" > "file.stripped"
然而,我已经悲伤地通过">"直到接收环境(shell),因为我已经使用了太多的引号。我已经尝试过各种各样的逃避和外壳包装"但是我无法让它打球。
有人想指出我正确的方向吗?
谢谢, Slarti。
答案 0 :(得分:0)
我用一个更简单的sed表达式做了一个类似的场景,看看它是否适合你:
我创建了3个文件,每个文件中都包含字符串“abcd”:
# ls -l
total 12
-rw-r--r-- 1 root root 5 Oct 6 09:05 test.aaaaa.com
-rw-r--r-- 1 root root 5 Oct 6 09:05 test2.aaaaa.com
-rw-r--r-- 1 root root 5 Oct 6 09:05 test3.aaaaa.com
# cat test*
abcd
abcd
abcd
使用-exec选项而不是xargs运行find命令,并将sed表达式替换为简单替换“b”的每个“a”和替换-i的选项-i,直接写入输入文件:
# find . -name "*.com" -type f -print0 -exec sed -i 's/a/b/g' {} \;
./test2.aaaaa.com./test3.aaaaa.com./test.aaaaa.com
# cat test*
bbcd
bbcd
bbcd
在你的情况下它应该是这样的:
# find . -name "*.com" -type f -print0 -exec sed -i '1,/^[^\/]/{/^[^\/]/b; d}' {} \;