gpt4 book ai didi

linux - 从特定文件的开头删除换行符

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:00:32 34 4
gpt4 key购买 nike

我需要从所有扩展名为 .php 或 .html 的文件的开头删除任何换行符(Mac 上的回车符)。换行符之间没有其他字符,例如空格或任何其他字符。

例如(使用/lf 作为换行的例子):

/lf
/lf
<!doctype html>

/lf
<!doctype html>

应该减少到:

<!doctype html>

我发现的一种删除换行符的方法是:

tr -d '\012'

但我不知道如何将其定位到特定文件,更不用说前几行了。

所以我得到了以下内容:

find . \( -name "*.php" -or -name "*.html" \) | xargs grep -l "\012" | xargs sed -i -e "s/\012//g"

但这不会只针对前几行,而且我也不完全确定它是否正确地针对换行符。

那么,有人有什么好主意吗?

最佳答案

尝试:

sed -i '/./,$\!d' filename

或者甚至从查找:

find . \( -name "*.php" -or -name "*.html" \) -exec sed -i '/./,$\!d' {} \;

编辑:

!d 之前的 \ 可能不需要,在我的 shell 中我需要转义它,因为 csh 一直认为我是通过! 符号。


编辑 2:

所以 /./,$\!d 看起来有点乱,但这就是正在发生的事情。

  1. 这里定义了 2 个地址,第一个是正则表达式 .,它是任何非空行的内容。因此第一个地址是第一个与/./匹配的非空行。
  2. 然后我们有第二个地址,由 , 分隔,它只是 $,文件的结尾。因此,我们由 2 个地址定义的区域是一直到文件末尾的第一个非空行。
  3. 我们将在这里使用 sed 的delete 功能,它由脚本中的最后一个 d 表示。但是,通过使用 d,我们将删除从第一个非空行到文件末尾的所有内容。
  4. 最后,因为我们要删除我们想要的东西,所以我们在 d 命令前面使用 ! 来告诉 sed,“好的,做与我要你做的完全相反的事情”。因此,我们不是删除从第一个非空行到文件末尾的所有内容,而是完全相反,保留从第一个非空行到文件末尾的所有内容,这具有删除所有内容的效果文件开头的空行。

可能有一些方法可以使用 p(打印)命令来执行此操作,该命令有点像与删除相反,但实际上并不是那样.我确信有一些方法可以使用 p!p 来做到这一点。

关于linux - 从特定文件的开头删除换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12986621/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com