Linux 如何使用esc字符仅在文件中预加带制表符/空格的行?

Linux 如何使用esc字符仅在文件中预加带制表符/空格的行?,linux,perl,unix,awk,sed,Linux,Perl,Unix,Awk,Sed,描述:包含制表符/制表符和/或空格/空格后跟新行字符且不需要转义其他字符的整行。在一个巨大的数据文件中分散着几行这样的数据 需要注意的是: 这里的空格是指(制表符或空格)而不是空行。 只有一个新行字符的空白行不应该预先准备好(需要删除)。该拆卸部件可能在一个衬里中实现,也可能不在一个衬里中实现 基本上,我想知道是否可能使用sed/perl/awk一行程序 提前谢谢 我的尝试没有多大成功 我试过这些,但没有多大成功 sed -i 's/\^[\s\+\|\t\+]\+\$\n/\^\\[\s\+\

描述:包含制表符/制表符和/或空格/空格后跟新行字符且不需要转义其他字符的整行。在一个巨大的数据文件中分散着几行这样的数据

需要注意的是: 这里的空格是指(制表符或空格)而不是空行。
只有一个新行字符的空白行不应该预先准备好(需要删除)。该拆卸部件可能在一个衬里中实现,也可能不在一个衬里中实现

基本上,我想知道是否可能使用sed/perl/awk一行程序

提前谢谢

我的尝试没有多大成功


我试过这些,但没有多大成功

sed -i 's/\^[\s\+\|\t\+]\+\$\n/\^\\[\s\+\|\t\+]\+\$\n/g' filename

perl -i -ne 'chomp; print \"\\\$_\n\" if (\$_ eq \"\")' filename

perl -pi -ne 's/\S\+/\\\S\+/g if (\$_ eq \"\")' filename

sed -i 's/\^[:space:]\+\$\n/\^\\[:space:]\+\$\n/g' filename

要在仅包含空格的行前加上反斜杠,可以执行以下操作:

awk 'NF==0 && length($0){$0="\\" $0}1' file
要同时删除空行,可以执行以下操作:

awk 'NF==0 && length($0){$0="\\" $0}length($0)' file

要在仅包含空格的行前加上反斜杠,可以执行以下操作:

awk 'NF==0 && length($0){$0="\\" $0}1' file
要同时删除空行,可以执行以下操作:

awk 'NF==0 && length($0){$0="\\" $0}length($0)' file

您将使用posix字符类:

sed -r 's/^([[:space:]]+)$/\\\1/;/^$/d' yourfile
这将保留包含空格的行中的空格,只是在反斜杠前面加上前缀。请注意,您也可以使用
[:space:][/code>,而不是
[:blank:][/code>,前者匹配所有空白字符(相当于
[\t\r\n\v\f]
),而后者仅严格匹配空格和制表符(相当于
[\t]


EDIT:我还添加了删除完全空的行的命令(在sed命令中的分号之后)。

您将使用posix字符类:

sed -r 's/^([[:space:]]+)$/\\\1/;/^$/d' yourfile
这将保留包含空格的行中的空格,只是在反斜杠前面加上前缀。请注意,您也可以使用
[:space:][/code>,而不是
[:blank:][/code>,前者匹配所有空白字符(相当于
[\t\r\n\v\f]
),而后者仅严格匹配空格和制表符(相当于
[\t]



EDIT:我还添加了命令,以删除完全空的行(在sed命令中的分号之后)。

尝试了这些操作,但没有成功。。sed-i的/\^[\s\+\\\\\\\\t\+]\+\$\n/\^\[\s\+\\\\\\\\\\\\\\+]\+\$\n/g'文件名perl-i-ne'chomp;打印\“\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\。你能编辑你的文章,包括一些样本输入和样本输出吗?是的,这是可能的。有些一行代码包含10000多个字符,完全无法读取-因为您要求的是“一行代码”,这可能是您得到的,希望可以。通过需要转义,我的意思是这些行应该保留在文件中,但前面有一个esc字符“\”。不应从文件中删除这些行。尝试了这些行但未取得多大成功。。sed-i的/\^[\s\+\\\\\\\\t\+]\+\$\n/\^\[\s\+\\\\\\\\\\\\\\+]\+\$\n/g'文件名perl-i-ne'chomp;打印\“\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\。你能编辑你的文章,包括一些样本输入和样本输出吗?是的,这是可能的。有些一行代码包含10000多个字符,完全无法读取-因为您要求的是“一行代码”,这可能是您得到的,希望可以。通过需要转义,我的意思是这些行应该保留在文件中,但前面有一个esc字符“\”。不应从文件中删除这些行。
[[:space:][]
可能是一种过激行为。我的:
sed-e的|[:blank:]\+\\&/^$/d'file
谢谢Jaybee,但是对于sed,我在使用您的OneLiner时遇到的问题或我发布的问题是“sed:-e expression#1,char 17:unterminated`s'command”,这表明在stackoverflow中的一篇文章中。。。。。脚本包含模式中的换行符。所以它抱怨第一行。。。。最好使用perl的正则表达式来处理多行替换EAH,我还想在替换字符串中使用
$
,但由于某种奇怪的原因,我未能正确使用它+1!@Seeker,你确定你使用了双括号吗,例如
:空格:
?另外,这可能是关于使用
+
元字符的问题,它是扩展regexp的一部分(由我们可以给sed的
-r
标志指示),但不是标准regexp的一部分…@Jaybee,是的,我使用了双括号,前面的一个括号围绕着:space:,两种方式都给出了相同的问题。
[:space:]
可能是一种过度杀伤力。我的:
sed-e的|[:blank:]\+\\&/^$/d'file
谢谢Jaybee,但是对于sed,我在使用您的OneLiner时遇到的问题或我发布的问题是“sed:-e expression#1,char 17:unterminated`s'command”,这表明在stackoverflow中的一篇文章中。。。。。脚本包含模式中的换行符。所以它抱怨第一行。。。。最好使用perl的正则表达式来处理多行替换EAH,我还想在替换字符串中使用
$
,但由于某种奇怪的原因,我未能正确使用它+1!@Seeker,你确定你使用了双括号吗,例如
:空格:
?另外,这可能是关于使用
+
元字符的问题,它是扩展regexp的一部分(由我们可以给sed的
-r
标志指示),但不是标准regexp的一部分…@Jaybee,是的,我使用了双括号,前面的一个括号:space:,谢谢似乎更适合我的目的谢谢似乎更适合我的目的