And*_*eak 4 unix awk text-processing sed
我的目标是在文件的每一行中添加单撇号,并跳过空行。
file.txt:
Quote1
Quote2
Quote3
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经使用sed:
sed -e "s/\(.*\)/'\1'/"
Run Code Online (Sandbox Code Playgroud)
哪个可以工作,但也会在空行中产生撇号:
'Quote1'
'Quote2'
''
'Quote3'
Run Code Online (Sandbox Code Playgroud)
我的目标:
'Quote1'
'Quote2'
'Quote3'
Run Code Online (Sandbox Code Playgroud)
我如何通过使用sed来实现这一目标,或者应该是awk。
.*意味着zero or more characters,您希望1 or more characters在任何sed中将是..*:
$ sed "s/..*/'&'/" file
'Quote1'
'Quote2'
'Quote3'
Run Code Online (Sandbox Code Playgroud)
您还可以像.\+使用GNU sed,.\{1,\}POSIX sed 以及.+GNU或OSX / BSD sed 一样编写该regexp -E。
以上假设所有空白行均应加引号。如果那是错误的,那么:
$ sed "s/.*[^[:blank:]].*/'&'/" file
'Quote1'
'Quote2'
'Quote3'
Run Code Online (Sandbox Code Playgroud)
在任何awk中,假定所有空白行均应加引号:
$ awk '/./{$0="\047" $0 "\047"}1' file
'Quote1'
'Quote2'
'Quote3'
Run Code Online (Sandbox Code Playgroud)
除此以外:
$ awk 'NF{$0="\047" $0 "\047"}1' file
'Quote1'
'Quote2'
'Quote3'
Run Code Online (Sandbox Code Playgroud)
您可以看到上面的区别:
$ printf ' \n' | sed "s/..*/'&'/"
' '
$ printf ' \n' | sed "s/.*[^[:blank:]].*/'&'/"
$ printf ' \n' | awk '/./{$0="\047" $0 "\047"}1'
' '
$ printf ' \n' | awk 'NF{$0="\047" $0 "\047"}1'
$
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |