2

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

2 回答 2

4

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

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

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

于 2013-08-20T19:33:09.183 回答
1

sed

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

或者,如果您需要在该空白处加上引号以使其可见,请使用:

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

测试:

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

输出:

'        '

(不多,只是空格:),但这就是你想要的)

于 2013-08-20T19:31:16.193 回答