Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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删除任何没有前导空格的字符_Bash - Fatal编程技术网

Bash删除任何没有前导空格的字符

Bash删除任何没有前导空格的字符,bash,Bash,我试图获得bash变量的尾随空格(最终是制表符)。目的是在匹配缩进级别使用外部工具插件在gedit中插入一些代码 例如,如果字符串如下所示: ' a string containing multiple spaces and other characters():' 我想得到以下信息: ' ' 这些引文只是为了便于阅读。 在bash中有没有一种简单的方法可以做到这一点 对于任何想了解gedit外部工具的人,我将使用此工具插入pdb断点: #!/bin/sh fo

我试图获得bash变量的尾随空格(最终是制表符)。目的是在匹配缩进级别使用外部工具插件在gedit中插入一些代码

例如,如果字符串如下所示:

'        a string containing multiple spaces and other characters():'
我想得到以下信息:

'        '
这些引文只是为了便于阅读。
在bash中有没有一种简单的方法可以做到这一点

对于任何想了解gedit外部工具的人,我将使用此工具插入pdb断点:

#!/bin/sh

foo=$GEDIT_CURRENT_LINE
foo="${foo%%[^ ]*}"
echo -n "
${foo}import pdb
${foo}pdb.set_trace()"
使用
sed

sed 's/\( *\).*/\1/' your.file
或者,如果您需要在whitepsace周围加引号以使其可见,请使用:

sed "s/\( *\).*/'\1'/" your.file

测试:

输出:

'        '

(不多,只有空格:),但这正是您想要的)

在纯Bash或任何POSIX shell中,您可以编写,例如:

foo='        a string containing multiple spaces and other characters():'
foo="${foo%%[^ ]*}"
echo "<$foo>"    # prints '<        >'
foo='包含多个空格和其他字符的字符串():'
foo=“${foo%%[^]*}”
回声“#打印”<>”

${parameter%%word}
扩展为
parameter
的值,减去与
word
匹配的最长尾随子字符串。在这种情况下,
word
[^]*
,意思是“任何非空格字符,后跟零个或多个字符”,因此匹配它的最长尾随子字符串是从第一个非空格字符开始的尾随子字符串。有关详细信息,请参见。)

您的意思是要获取前导空格,对吗?对,但已经给出了答案。可能建议使用“${foo%%[^[:space:]}”也可以处理制表符和其他空白。@CharlesDuffy:您缺少了一个星号,但是是的,这是一个很好的建议。这取决于OP想要什么。
foo='        a string containing multiple spaces and other characters():'
foo="${foo%%[^ ]*}"
echo "<$foo>"    # prints '<        >'