我想将我的文件中以空格开头的每行添加到上一行。
INPUT FILE
roleOccupant:uid=standard_rhc,ou=tenants,ou=users,dc=e-depot,dc=rad,dc
=lan
roleOccupant:uid=standard_test,ou=tenants,ou=users,dc=e-depot,dc=rad
,dc=lan
roleOccupant:uid=standard_NLHaNA,ou=tenants,ou=users,dc=e-depot,dc=
rad,dc=lan
roleOccupant:uid=standard_dept,ou=tenants,ou=users,dc=e-depot,dc=rad
,dc=lan
输出文件
roleOccupant:uid=standard_rhc,ou=tenants,ou=users,dc=e-epot,dc=rad,dc=lan
roleOccupant:uid=standard_test,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
roleOccupant:uid=standard_NLHaNA,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
roleOccupant:uid=standard_dept,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
提前致谢
答案 0 :(得分:1)
使用sed
:
sed ':a;N;$!ba;s/\n //g' file
在多行版本中有更好的解释:
# Define a label called 'a'
:a
# Read the next line of input and append it to the
# internal pattern buffer
N
# $ means 'the last line of input'
# ! negates the match
# ba (b)ranches back to label 'a'
# Means:
# Unless we've reached the end of the input file
# read the file line by line into the pattern buffer
$!ba
# Once the end of the input file is reached we substitute
# every occurrence of newline+space by an empty string
s/\n //g
# sed will print the result of the substitution by default
PS:根据您的sed
版本,您可能需要使用:
s/
//g
而不是
s/\n //g
意味着如果不支持\n
,则需要使用文字换行符
顺便说一下,如果你的输入文件只包含两行,其中一行必须附加到前一行,而只有(!),那么它可以像下面这样简单:
sed 'N;s/\n //' file
这也不需要将整个文件缓冲在内存中。
答案 1 :(得分:1)
使用 awk
的可能解决方案$ awk -v RS= '{gsub(/\n /,"")}1' file
roleOccupant:uid=standard_rhc,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
roleOccupant:uid=standard_test,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
roleOccupant:uid=standard_NLHaNA,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
roleOccupant:uid=standard_dept,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
$ awk -v OFS= -v ORS= '/^ /{$NF=$NF RS}1' file
roleOccupant:uid=standard_rhc,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
roleOccupant:uid=standard_test,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
roleOccupant:uid=standard_NLHaNA,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
roleOccupant:uid=standard_dept,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
$ awk -v ORS= '/^ /{ sub(/ /,""); $NF=$NF RS}1' file
roleOccupant:uid=standard_rhc,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
roleOccupant:uid=standard_test,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
roleOccupant:uid=standard_NLHaNA,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
roleOccupant:uid=standard_dept,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
$ awk '/^[^ ]/{ORS=""} /^ /{OFS=""; $1=$1; ORS=RS}1' file
roleOccupant:uid=standard_rhc,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
roleOccupant:uid=standard_test,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
roleOccupant:uid=standard_NLHaNA,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
roleOccupant:uid=standard_dept,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
我会推荐第1,第2和第3个解决方案 第四个是第二个更详细的版本。
还有更多,但我认为这就足够了。
答案 2 :(得分:0)
关注awk可能对你有帮助。
awk '{sub(/^ +/,"");printf("%s%s",$0~/^role/?(NR==1?$0:RS $0):$0,$0)} END{print ""}' Input_file
答案 3 :(得分:0)
awk
救援!
$ awk '{if(sub(/^ /,p,$0)) print; else p=$0}' file
roleOccupant:uid=standard_rhc,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
roleOccupant:uid=standard_test,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
roleOccupant:uid=standard_NLHaNA,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
roleOccupant:uid=standard_dept,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
答案 4 :(得分:0)
另一种 awk 方法:
awk '{ printf "%s%s",$1,(/^ /? ORS:"") }' file
输出:
roleOccupant:uid=standard_rhc,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
roleOccupant:uid=standard_test,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
roleOccupant:uid=standard_NLHaNA,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
roleOccupant:uid=standard_dept,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
答案 5 :(得分:0)
perl -0pe 's/\n +//g' input-file
答案 6 :(得分:0)
这可能适合你(GNU sed):
sed ':a;N;s/\n //;ta;P;D' file
在图案空间中读取两行,如果附加的行以空格开头,则删除前面的换行符和空格并重复。否则,打印图案空间中的第一行,删除第一行并重复。
答案 7 :(得分:0)
根据您发布的数据:
$ awk '{ORS=(sub(/^ /,"")?RS:"")}1' file
roleOccupant:uid=standard_rhc,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
roleOccupant:uid=standard_test,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
roleOccupant:uid=standard_NLHaNA,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
roleOccupant:uid=standard_dept,ou=tenants,ou=users,dc=e-depot,dc=rad,dc=lan
使用其他数据YMMV,希望您对样本有所考虑。