请问下面的bash脚本试图做什么?
args=$(echo $@ |sed "s/^ *//;s/ *$//;s/ \{1,\}/ /g;s/-\{1,\} /-/g;s/ -/\t-/g")
谢谢!
答案 0 :(得分:2)
让我们分解一下:
s/^ *//;
s/ *$//;
s/ \{1,\}/ /g;
s/-\{1,\} /-/g;
s/ -/\t-/g
1。删除行首
的空格2. 删除行尾的空格
3. 用一个空格替换空格
4. 以短划线取代破折号
5. 按标签和短划线替换空格和短划线
答案 1 :(得分:1)
脚本修剪通过命令行传递给脚本的参数。 (可以使用shell中的$@
来解决所有参数的数组)
修剪意味着,它会删除字符串中间的冗余空格,并在每个参数的开头和结尾完全删除空格。您的代码将进一步用TAB
替换连字符前面的空格。
由命令进行的转换,详细说明:
s/^ *// --> remove 0 or more spaces at the start of the string
s/ *$// --> remove 0 or more spaces at the end of the string
/ \{1,\}/ /g --> "melts" multiple spaces into one
s/-\{1,\} /-/g --> Removes one or more white space after the hypen `-`
s/ -/\t-/g --> Removes a space in front of a hypen by a TAB
答案 2 :(得分:1)
让我们把它分成小块,这样更容易理解:
删除行首的空格
s/^ *//;
删除行尾的所有空格
s/ *$//;
用一个空格替换两个或多个空格
s/ \{1,\}/ /g;
用一个破折号
替换两个或多个破折号后跟一个空格-
s/-\{1,\} /-/g;
用标签和短划线-
替换空格和短划线\t-
s/ -/\t-/g
答案 3 :(得分:1)
sed
清理空格并对其进行更改:
sdfgsdfg
afadsfads fadsf
adsfadf adfadfads
adfadfa - adsfdsf
dfadsf - dsfds
dfsd - sdfsd
对此:
sed "s/^ *//;s/ *$//;s/ \{1,\}/ /g;s/-\{1,\} /-/g;s/ -/\t-/g" file
sdfgsdfg
afadsfads fadsf
adsfadf adfadfads
adfadfa -adsfdsf
dfadsf -dsfds
dfsd -sdfsd
使用awk
awk '{$1=$1;sub(/ - /,"\t-")}1' file
sdfgsdfg
afadsfads fadsf
adsfadf adfadfads
adfadfa -adsfdsf
dfadsf -dsfds
dfsd -sdfsd
或者在你的情况下:
args=$(echo $@ | awk '{$1=$1;sub(/ - /,"\t-")}1')