Linux 从特定文件的开头删除换行符
我需要从所有扩展名为.php或.html的文件的一开始就删除任何出现的换行符(mac上的回车符)。换行符之间没有空格之类的字符 例如(使用/lf作为换行的示例): 但我不知道如何针对特定的文件,更不用说前几行了 因此,我有以下几点:Linux 从特定文件的开头删除换行符,linux,shell,unix,sed,Linux,Shell,Unix,Sed,我需要从所有扩展名为.php或.html的文件的一开始就删除任何出现的换行符(mac上的回车符)。换行符之间没有空格之类的字符 例如(使用/lf作为换行的示例): 但我不知道如何针对特定的文件,更不用说前几行了 因此,我有以下几点: find . \( -name "*.php" -or -name "*.html" \) | xargs grep -l "\012" | xargs sed -i -e "s/\012//g" 但这不会只针对前几行,而且我也不能完全确定它是否正确地针对行提要
find . \( -name "*.php" -or -name "*.html" \) | xargs grep -l "\012" | xargs sed -i -e "s/\012//g"
但这不会只针对前几行,而且我也不能完全确定它是否正确地针对行提要
有人有什么好主意吗?试试:
sed -i '/./,$\!d' filename
或者甚至从find:
find . \( -name "*.php" -or -name "*.html" \) -exec sed -i '/./,$\!d' {} \;
编辑: 在
之前的\
!d
可能不需要,在我的shell中,我需要转义它,因为csh一直认为我通过引用了以前的事件代码>符号
编辑2:
因此,/./,$\!d
,有点,看起来像胡言乱语,但事实就是这样
这里定义了两个地址,第一个是regex
,它不是空行。因此,第一个地址是由/./
匹配的第一个非空行
然后我们有第二个地址,由,
分隔,它只是$
,文件的结尾。因此,由2个地址定义的区域是一直到文件末尾的第一个非空行
我们将在这里使用sed的delete函数,它由脚本中最后一个d
表示。但是,通过使用d
,我们将删除从第一个非空行开始到文件末尾的所有内容
最后,因为我们将删除我们想要的东西,所以我们使用
就在d
命令的前面,告诉sed,“好的,做与我要你做的完全相反的事情”。因此,不是从第一个非空白行开始删除文件的末尾,而是完全相反,将第一个非空行保留到文件的末尾,这有删除文件开头的所有空白行的效果。
使用p
(print)命令可能有办法做到这一点,这有点像delete的反面,但实际上并不是这样。我相信有一些方法可以通过p
或实现这一点!p
试试:
sed -i '/./,$\!d' filename
或者甚至从find:
find . \( -name "*.php" -or -name "*.html" \) -exec sed -i '/./,$\!d' {} \;
编辑:
在之前的\
!d
可能不需要,在我的shell中,我需要转义它,因为csh一直认为我通过引用了以前的事件代码>符号
编辑2:
因此,/./,$\!d
,有点,看起来像胡言乱语,但事实就是这样
这里定义了两个地址,第一个是regex
,它不是空行。因此,第一个地址是由/./
匹配的第一个非空行
然后我们有第二个地址,由,
分隔,它只是$
,文件的结尾。因此,由2个地址定义的区域是一直到文件末尾的第一个非空行
我们将在这里使用sed的delete函数,它由脚本中最后一个d
表示。但是,通过使用d
,我们将删除从第一个非空行开始到文件末尾的所有内容
最后,因为我们将删除我们想要的东西,所以我们使用
就在d
命令的前面,告诉sed,“好的,做与我要你做的完全相反的事情”。因此,不是从第一个非空白行开始删除文件的末尾,而是完全相反,将第一个非空行保留到文件的末尾,这有删除文件开头的所有空白行的效果。
使用p
(print)命令可能有办法做到这一点,这有点像delete的反面,但实际上并不是这样。我相信有一些方法可以通过p
或实现这一点!p
如果您已经安装了Perl,那么Perl非常适合这种类型的处理。您可以执行一个“do..until”循环,一旦找到一行非空白字符,它就会退出。不经意间:
do {
s/^\s$//;
} until ( /^\S/ );
(但是要先验证那些正则表达式是否执行了您希望它们执行的操作!)如果您已经安装了Perl,那么Perl非常适合这种类型的处理。您可以执行一个“do..until”循环,一旦找到一行非空白字符,它就会退出。不经意间:
do {
s/^\s$//;
} until ( /^\S/ );
(但请验证这些正则表达式是否执行了您希望它们首先执行的操作!)使用:
find /path/to/root/directory -type f -exec tr -d '\012' {} \;
其中/path/to/root/directory是查找所有文件以删除所有事件的顶级路径。使用:
find /path/to/root/directory -type f -exec tr -d '\012' {} \;
其中/path/to/root/directory是查找所有文件以删除所有引用的顶级路径。如果您知道换行仅在前10行中,则可以更改SED命令,使其仅在前10行上运行。这是下面的1,10
xargs sed -i -e "1,10s/\012//g"
如果您知道换行符仅在前10行中,则可以更改SED命令,使其仅在前10行上运行。这是下面的1,10
xargs sed -i -e "1,10s/\012//g"
从文件中删除所有\f
。OP只需要位于文件开头的那些从文件中删除所有\f
。OP只需要文件开头的那些,你能解释一下“/。/,$\”表达式是什么吗!d'意味着?我创建了一个测试文件,其中包含:seq 4 | sed'1s/*/\n/;2s/*/\n\r/;3s/*/\r/;4s/*/'
。此处sed'/[:blank:][]/,$!d'
效果更好。@BrunovonParis编辑了答案,并详细解释了这些胡言乱语