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

时间:2013-08-20 19:28:07

标签: bash

我正在尝试获取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()"

2 个答案:

答案 0 :(得分:4)

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

foo='        a string containing multiple spaces and other characters():'
foo="${foo%%[^ ]*}"
echo "<$foo>"    # prints '<        >'

${parameter%%word}扩展为parameter的值,减去与word匹配的最长尾随子字符串。在这种情况下,word[^ ]*,表示“任何非空格字符,后跟零个或多个字符“,因此匹配它的最长尾随子字符串是从第一个非空格字符开始的尾随子字符串。有关更多信息,请参阅§3.5.3 "Shell Parameter Expansion" in the Bash Reference Manual。)

答案 1 :(得分:0)

使用sed

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

或者,如果您需要围绕该whitepsace使用引号以使其可见:

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

测试:

echo '        a string containing multiple spaces and other characters():' \
    | sed "s/\( *\).*/'\1'/" your.file

输出:

'        '

(不多,只是空白:),但那就是你想要的)