版权声明:每天要问下自己:“昨天的自己与今天的自己有啥区别?” 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