我需要从使用.php或.html扩展名的所有文件开始时删除线馈电(Mac上的马车返回)的任何出现。没有线之间的其他字符,例如空格或任何东西。
so例如(以/lf为例):
/lf
/lf
<!doctype html>
或
/lf
<!doctype html>
应减少到:
<!doctype html>
我发现的一种删除线供稿的方法是:
tr -d ' 12'
,但我不知道如何在特定文件上定位它,更不用说只有前几行。
所以我有以下内容:
find . ( -name "*.php" -or -name "*.html" ) | xargs grep -l " 12" | xargs sed -i -e "s/ 12//g"
,但这不仅仅是针对前几行,而且我不确定它是否正确针对线路。
那么,有人有任何明亮的想法吗?
尝试:
sed -i '/./,$!d' filename
,甚至来自查找:
find . ( -name "*.php" -or -name "*.html" ) -exec sed -i '/./,$!d' {} ;
编辑:
可能不需要!d
之前的,在我的外壳中,我需要逃脱它,因为CSH一直认为我是通过
!
符号来指代先前的事件。
编辑2:
所以 /./,$!d
,位,看起来像gibberish,但这就是发生的事情。
- 这里定义了2个地址,第一个是Regex
.
,它不是空白行。因此,第一个地址是由/./
匹配的第一个非空白线。 - 然后,我们有第二个地址,由
,
隔开,仅$
即文件的末尾。因此,我们由2个地址定义的区域是通往文件末尾的第一个非空白行。 - 我们将在此处使用SED的 delete 函数,该功能由脚本中的最后一个
d
表示。但是,通过使用d
,我们将删除从第一个非空白行到文件末尾的所有内容。 - 最后,因为我们要删除想要的东西,所以我们在
d
命令前使用!
来告诉SED:"好的,做与我告诉您要做的事情完全相反"。因此,我们没有从第一个非空白行到文件末尾删除所有内容,而是进行完全相反的事情,将第一个非空白行保留到文件末尾,这具有删除所有内容的效果文件开头的空白行。
可能有某种方法可以使用 p
(print)命令来执行此操作,这是 的,是delete的对立面,但并非如此。我敢肯定有一些方法可以使用p
或!p
。
perl如果安装了此类处理,则适用于这种类型的处理。您可以做一些"做..直到"循环,一旦找到具有非空格字符的线路就会退出。从我的头顶上方:
do {
s/^s$//;
} until ( /^S/ );
(但验证这些正则表达式执行您要首先要的事情!)
使用:
find /path/to/root/directory -type f -exec tr -d ' 12' {} ;
where/path/to/to/root/Directory是顶级路径,寻找所有文件以删除所有出现。
如果您知道lineFeeds仅在第一个(例如10行)中,则可以更改SED命令,以便它仅在前十行中运行。那是下面的1,10
。
xargs sed -i -e "1,10s/ 12//g"