从特定文件的启动开始删除线供稿



我需要从使用.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,但这就是发生的事情。

  1. 这里定义了2个地址,第一个是Regex .,它不是空白行。因此,第一个地址是由/./匹配的第一个非空白线。
  2. 然后,我们有第二个地址,由,隔开,仅$即文件的末尾。因此,我们由2个地址定义的区域是通往文件末尾的第一个非空白行。
  3. 我们将在此处使用SED的 delete 函数,该功能由脚本中的最后一个d表示。但是,通过使用d,我们将删除从第一个非空白行到文件末尾的所有内容。
  4. 最后,因为我们要删除想要的东西,所以我们在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"

最新更新