我正在尝试获取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()"
答案 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
输出:
' '
(不多,只是空白:),但那就是你想要的)