我需要将每行以#开头到下一行的末尾(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.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 /
$
分隔符。$
字符有任何建议如何让它变得更好(表现和看起来)?
由于
答案 0 :(得分:4)
我需要将每行以#开头到下一行的末尾
试试这一行:
awk '/^#/{x=$0;next}{if(x)print $0,x;else print;x=0}' file
或
awk '/^#/{x=$0;next}{print $0 (x? FS x:"");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
答案 1 :(得分:1)
这可能适合你(GNU sed):
sed -r '/^#/{$!N;s/(.*)\n(.*)/\2 \1/}' file
如果该行以散列开头,则追加换行符和下一行(除非当前行是文件中的最后一行),然后将该行与当前行交换并在它们之间放置一个空格。