awk gsub ^Z无法替换的问题

版权声明:每天要问下自己:“昨天的自己与今天的自己有啥区别?” https://blog.csdn.net/u010921682/article/details/83307595

在学习《Shell脚本学习指南》一书时遇到了一个问题:
gsub("^Z", "\n")无法被替换回去

问题解决:加上转义符,并且要加上双反斜杠
gsub("\\^Z", "\n")

比较让人疑问的是前面的替换并没有要求加上反斜杠
gsub("\n", "^Z") 或者 gsub("\n", "\^Z")
如果加上gsub("\n", "\\^Z")则会多出一个/

下面是案例:

[liujing@localhost testfiles]$ cat friends 
# SORTKEY: Schlob, Hans Jurgen
Hans Jurgen Schlob
Unter den Linden 78
D-10117 Berlin
Germany

# SORTKEY: Jones, Adrian
Adrian Jones
371 Mongomery Park Road
Henley-on-Thames RG9 4AJ
UK

# SORTKEY: Brown, Kim
Kim Brown
1841 S Main Street
Westchester, NY 10502
USA

将文本中的\n换行符替换成^Z

[liujing@localhost testfiles]$ cat friends | awk -v RS="" '{ gsub("\n", "^Z"); print}'
# SORTKEY: Schlob, Hans Jurgen^ZHans Jurgen Schlob^ZUnter den Linden 78^ZD-10117 Berlin^ZGermany
# SORTKEY: Jones, Adrian^ZAdrian Jones^Z371 Mongomery Park Road^ZHenley-on-Thames RG9 4AJ^ZUK
# SORTKEY: Brown, Kim^ZKim Brown^Z1841 S Main Street^ZWestchester, NY 10502^ZUSA

不区分大小写的排序

[liujing@localhost testfiles]$ cat friends | awk -v RS="" '{ gsub("\n", "^Z"); print}'| sort -f 
# SORTKEY: Brown, Kim^ZKim Brown^Z1841 S Main Street^ZWestchester, NY 10502^ZUSA
# SORTKEY: Jones, Adrian^ZAdrian Jones^Z371 Mongomery Park Road^ZHenley-on-Thames RG9 4AJ^ZUK
# SORTKEY: Schlob, Hans Jurgen^ZHans Jurgen Schlob^ZUnter den Linden 78^ZD-10117 Berlin^ZGermany

将^Z替换成\n换行符

[liujing@localhost testfiles]$ cat friends | 
> awk -v RS="" '{ gsub("\n", "^Z"); print }' | 
> sort -f | 
> awk -v ORS="\n\n" '{ gsub("\\^Z", "\n"); print }'
# SORTKEY: Brown, Kim
Kim Brown
1841 S Main Street
Westchester, NY 10502
USA

# SORTKEY: Jones, Adrian
Adrian Jones
371 Mongomery Park Road
Henley-on-Thames RG9 4AJ
UK

# SORTKEY: Schlob, Hans Jurgen
Hans Jurgen Schlob
Unter den Linden 78
D-10117 Berlin
Germany

去除注释

[liujing@localhost testfiles]$ cat friends | 
> awk -v RS="" '{ gsub("\n", "^Z"); print}' | 
> sort -f | 
> awk -v ORS="\n\n" '{ gsub("\\^Z", "\n"); print }' | 
> grep -v '# SORTKEY'
Kim Brown
1841 S Main Street
Westchester, NY 10502
USA

Adrian Jones
371 Mongomery Park Road
Henley-on-Thames RG9 4AJ
UK

Hans Jurgen Schlob
Unter den Linden 78
D-10117 Berlin
Germany

猜你喜欢

转载自blog.csdn.net/u010921682/article/details/83307595
awk