我试图通过去除不必要的空格,空行以及括号与它们之间的空间平衡来优化我的代码,所以:
int a = 4;
if ((a==4) || (b==5))
a++ ;
Run Code Online (Sandbox Code Playgroud)
应改为:
int a = 4;
if ( (a==4) || (b==5) )
a++ ;
Run Code Online (Sandbox Code Playgroud)
它适用于括号和空行.但是,它会忘记将多个空格减少到一个空格:
int a = 4;
if ( (a==4) || (b==5) )
a++ ;
Run Code Online (Sandbox Code Playgroud)
这是我的脚本:
#!/bin/bash
# Script to refine code
#
filename=read.txt
sed 's/((/( (/g' $filename > new.txt
mv new.txt $filename
sed 's/))/) )/g' $filename > new.txt
mv new.txt $filename
sed 's/ +/ /g' $filename > new.txt
mv new.txt $filename
sed '/^$/d' $filename > new.txt
mv new.txt $filename
Run Code Online (Sandbox Code Playgroud)
此外,有没有办法使这个脚本更简洁,例如删除或减少命令的数量?
Sic*_*cco 71
如果你正在使用GNU sed,那么你需要使用sed -r
哪些力sed
来使用扩展的正则表达式,包括想要的行为+
.见man sed
:
-r, --regexp-extended
use extended regular expressions in the script.
Run Code Online (Sandbox Code Playgroud)
如果您使用的是OS X sed,则同样适用,但您需要使用sed -E
:
-E Interpret regular expressions as extended (modern) regular expressions
rather than basic regular regular expressions (BRE's).
Run Code Online (Sandbox Code Playgroud)
cho*_*oba 13
你必须先+
用a \
,否则sed
尝试匹配角色+
本身.
要使脚本"更智能",您可以在一个sed中累积所有表达式:
sed -e 's/((/( (/g' -e 's/))/) )/g' -e 's/ \+/ /g' -e '/^$/d' $filename > new.txt
Run Code Online (Sandbox Code Playgroud)
sed
甚至一些实现支持-i
可以在适当位置更改文件的选项.
有时,-r和-e不起作用.我正在使用sed版本4.2.1,它们根本不适合我.
快速破解就是使用*运算符.所以假设我们想用一个空格替换所有冗余空格字符:我们想做:
sed 's/ +/ /'
Run Code Online (Sandbox Code Playgroud)
但我们可以用它代替:
sed 's/ */ /'
Run Code Online (Sandbox Code Playgroud)
(注意双倍空间)
归档时间: |
|
查看次数: |
26871 次 |
最近记录: |