Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何确保字符串前面正好有2个空格,后面正好有零个空格_Bash - Fatal编程技术网

Bash 如何确保字符串前面正好有2个空格,后面正好有零个空格

Bash 如何确保字符串前面正好有2个空格,后面正好有零个空格,bash,Bash,我得到一个字符串,它可以有从零到多个前导和尾随空格 我试图在没有大量黑客攻击的情况下摆脱它们,但我的代码看起来很大 如何以干净的方式执行此操作?如何调用字符串?如果是回声,你可以把 Echo "<2 spaces>". "string"; Echo”“。“字符串”; 如果是普通字符串,只需在第一个qoute和字符串之间放置2个空格 "<2spaces> string here" “这里是字符串” 您如何调用字符串?如果是回声,你可以把 Echo "<2 spa

我得到一个字符串,它可以有从零到多个前导和尾随空格

我试图在没有大量黑客攻击的情况下摆脱它们,但我的代码看起来很大


如何以干净的方式执行此操作?

如何调用字符串?如果是回声,你可以把

Echo "<2 spaces>". "string";
Echo”“。“字符串”;
如果是普通字符串,只需在第一个qoute和字符串之间放置2个空格

"<2spaces> string here"
“这里是字符串”

您如何调用字符串?如果是回声,你可以把

Echo "<2 spaces>". "string";
Echo”“。“字符串”;
如果是普通字符串,只需在第一个qoute和字符串之间放置2个空格

"<2spaces> string here"
“这里是字符串”

单向使用
GNU-sed

sed 's/^[ \t]*/  /; s/[ \t]*$//' file.txt
您可以将其应用于bash变量,如下所示:

echo "$string" | sed 's/^[ \t]*/  /; s/[ \t]*$//'
variable=$(echo "$string" | sed 's/^[ \t]*/  /; s/[ \t]*$//')
然后像这样保存它:

echo "$string" | sed 's/^[ \t]*/  /; s/[ \t]*$//'
variable=$(echo "$string" | sed 's/^[ \t]*/  /; s/[ \t]*$//')
说明:

第一个替换将删除所有前导空格,并将其替换为两个空格。
第二个替换将简单地删除一行中所有滞后的空格。

使用
GNU-sed
的一种方法:

sed 's/^[ \t]*/  /; s/[ \t]*$//' file.txt
您可以将其应用于bash变量,如下所示:

echo "$string" | sed 's/^[ \t]*/  /; s/[ \t]*$//'
variable=$(echo "$string" | sed 's/^[ \t]*/  /; s/[ \t]*$//')
然后像这样保存它:

echo "$string" | sed 's/^[ \t]*/  /; s/[ \t]*$//'
variable=$(echo "$string" | sed 's/^[ \t]*/  /; s/[ \t]*$//')
说明:

第一个替换将删除所有前导空格,并将其替换为两个空格。 第二个替换将简单地删除一行中所有滞后的空格。

简单到:

$ src="      some text          "

$ dst="  $(echo $src)" 

$ echo ":$dst:"
:  some text:
$(echo$src)
将清除所有周围的空格。 您只需在它之前添加所需的空间。

尽可能简单:

$ src="      some text          "

$ dst="  $(echo $src)" 

$ echo ":$dst:"
:  some text:
$(echo$src)
将清除所有周围的空格。
而不仅仅是在它之前添加所需的空间。

最简单的方法可能是使用外部进程

value=$(echo "$value" | sed 's/^ *\(.*[^ ]\) *$/  \1/')

如果需要将空字符串转换为两个空格,则需要修改正则表达式;如果您不在Linux上,您的
sed
方言可能会略有不同。为了获得最大的可移植性,请切换到
awk
或Perl,或者在Bash中完成所有操作。这有点复杂,但首先,
trailing=${value###*[!]}
包含任何尾随空格,您可以使用
${value%$trailing}
和前导空格来修剪它们。有关详细信息,请参阅Bash手册中有关变量替换的部分。

最简单的方法可能是使用外部进程

value=$(echo "$value" | sed 's/^ *\(.*[^ ]\) *$/  \1/')

如果需要将空字符串转换为两个空格,则需要修改正则表达式;如果您不在Linux上,您的
sed
方言可能会略有不同。为了获得最大的可移植性,请切换到
awk
或Perl,或者在Bash中完成所有操作。这有点复杂,但首先,
trailing=${value###*[!]}
包含任何尾随空格,您可以使用
${value%$trailing}
和前导空格来修剪它们。有关详细信息,请参阅Bash手册中有关变量替换的部分。

可以使用正则表达式匹配前导空格和尾随空格之间的所有内容。匹配的文本在
BASH_REMATCH
数组中找到(匹配第一个括号组的文本在元素1中)


可以使用正则表达式匹配前导空格和尾随空格之间的所有内容。匹配的文本在
BASH_REMATCH
数组中找到(匹配第一个括号组的文本在元素1中)


字符串可以包含尾随空格和前导空格吗?当然,它可能包含很多“介于”之间的空格扫描字符串可以包含尾随空格和前导空格吗?当然,它可能包含很多“介于”之间的空格
$(echo$src)
我喜欢它!非常简洁和稳定,它将咀嚼任何内部空间。如果您不介意的话,backticks中的
echo
是多余的。我建议您不要使用这种方法。为了演示,您可以使用
echo:$src:
替换最后一行,以获得相同的效果。如果你的
src='一两个'
有两个空格,其中一个将丢失。
$(echo$src)
成功了,我喜欢!非常简洁和稳定,它将咀嚼任何内部空间。如果您不介意的话,backticks中的
echo
是多余的。我建议您不要使用这种方法。为了演示,您可以使用
echo:$src:
替换最后一行,以获得相同的效果。如果您的
src='一两'
带有两个空格,其中一个将丢失。我会毫不犹豫地调用
sed
我会毫不犹豫地调用
sed