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