在学习《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