将以#开始的行移动到下一行的末尾。首选AWK或SED
我需要将从#开始的每一行移动到下一行的末尾(AWK/SED?) Testfile.txt:将以#开始的行移动到下一行的末尾。首选AWK或SED,sed,awk,merge,match,lines,Sed,Awk,Merge,Match,Lines,我需要将从#开始的每一行移动到下一行的末尾(AWK/SED?) Testfile.txt: # FIRST COMMENT alias1: john@domain.com, tom@domain.com alias2: betty@domain.com # SECOND COMMENT alias3: anna@domain.com, mark@domain.com alias4: dan@domain.com 预期产出: alias1: john@domain.com, tom@domain
# FIRST COMMENT
alias1: john@domain.com, tom@domain.com
alias2: betty@domain.com
# SECOND COMMENT
alias3: anna@domain.com, mark@domain.com
alias4: dan@domain.com
预期产出:
alias1: john@domain.com, tom@domain.com # FIRST COMMENT
alias2: betty@domain.com
alias3: anna@domain.com, mark@domain.com # SECOND COMMENT
alias4: dan@domain.com
我设法做到了这一点(但我相信这不是最好的解决方案):
sed'/^#/N;s/\n/$/'testfile.txt | sed-e的s/\(.*\)$\(.*\)/\2\1/
$
分隔符$
字符之间切换所有内容awk '/^#/{x=$0;next}{if(x)print $0,x;else print;x=0}' file
或
用您的示例进行测试:
kent$ echo "# FIRST COMMENT
alias1: john@domain.com, tom@domain.com
alias2: betty@domain.com
# SECOND COMMENT
alias3: anna@domain.com, mark@domain.com
alias4: dan@domain.com"|awk '/^#/{x=$0;next}{if(x)print $0,x;else print;x=0}'
alias1: john@domain.com, tom@domain.com # FIRST COMMENT
alias2: betty@domain.com
alias3: anna@domain.com, mark@domain.com # SECOND COMMENT
alias4: dan@domain.com
我需要把从#开始的每一行移到下一行的末尾
试试这句话:
awk '/^#/{x=$0;next}{if(x)print $0,x;else print;x=0}' file
或
用您的示例进行测试:
kent$ echo "# FIRST COMMENT
alias1: john@domain.com, tom@domain.com
alias2: betty@domain.com
# SECOND COMMENT
alias3: anna@domain.com, mark@domain.com
alias4: dan@domain.com"|awk '/^#/{x=$0;next}{if(x)print $0,x;else print;x=0}'
alias1: john@domain.com, tom@domain.com # FIRST COMMENT
alias2: betty@domain.com
alias3: anna@domain.com, mark@domain.com # SECOND COMMENT
alias4: dan@domain.com
这可能适用于您(GNU-sed):
如果该行以散列开头,则添加一个换行符和下一行(除非当前行是文件中的最后一行),然后将该行与当前行交换,并在它们之间放置一个空格。这可能适用于您(GNU-sed):
如果行以散列开头,则添加一个换行符和下一行(除非当前行是文件中的最后一行),然后将该行与当前行交换,并在它们之间留出一个空格。我正要发布相同的答案…但是…我看到了一个+1@mike既然你是新来的,记住,如果你的问题已经解决,你可以将答案标记为接受。您可以点击答案旁边的复选标记,将答案从空心切换为绿色。看看你是否有任何疑问!你能解释一下第一个例子是什么吗?我指的是将带有散列的行复制到x变量并转到下一行后发生的情况。@mike如果一行以
#
开头,将该行保存到varx
,然后我们转到下一行,将x
附加到该行,然后打印。@Kent我的意思有点不同,但我自己解决了:如果x不等于0,则打印整个(下一行)行并将其附加x,否则打印整行(下一行),然后在if语句之后将x设置为0.:)顺便问一下,这个解决方案也是正确的吗?awk'/^#/{getline t;print t,$0;next};1'testfile.txtI正要发布相同的答案…但是…我看到了这么多+1@mike既然你是新来的,记住如果你的问题已经解决了,你可以把答案标记为接受。您可以点击答案旁边的复选标记,将答案从空心切换为绿色。看看你是否有任何疑问!你能解释一下第一个例子是什么吗?我指的是将带有散列的行复制到x变量并转到下一行后发生的情况。@mike如果一行以#
开头,将该行保存到varx
,然后我们转到下一行,将x
附加到该行,然后打印。@Kent我的意思有点不同,但我自己解决了:如果x不等于0,则打印整个(下一行)行并将其附加x,否则打印整行(下一行),然后在if语句之后将x设置为0.:)顺便问一下,这个解决方案也是正确的吗?awk'/^#/{getline t;print t,$0;next};1'testfile.txt