用于从变量中删除最后七个字符的 Unix 脚本

Unix Script to remove last seven characters from a variable

需要从变量中删除最后七个字符。

例如,如果我的变量字符串是

COLUMN_NAME||','||

那么它应该输出 COLUMN_NAME

我试过下面的方法,但最后一个管道符号只被删除了

var=$(lastline%|)
var=$(lastline%|*)

结果:COLUMN_NAME||','|

老派方式

echo "COLUMN_NAME||','||" | rev|cut -c 8-|rev

所以你只是反转字符串,删除前 7 个字符,然后再次反转字符串。

使用 $variable 和 echo 来做同样的事情。

您也可以像下面这样使用 awk,这样会更快。

awk '{print substr([=11=], 1, length([=11=])-7)}'

示例:

$ export variable1="COLUMN_NAME||','||"
$ echo $variable1|rev|cut -c 8-|rev
COLUMN_NAME
$ echo $variable1|awk '{print substr([=12=], 1, length([=12=])-7)}'
COLUMN_NAME

你需要使用两个%来去除最长的匹配:

$ r="COLUMN_NAME||','||"
$ echo ${r%%|*}
COLUMN_NAME

正如 BashFAQ 在 Removing part of a string 中所说:

% means "remove the shortest possible match from the end of the variable's contents".

%% means "remove the longest possible match from the end of the variable's contents".

您可以从该点找到 string/s 和索引的长度:

str1="1234567890foobar";
strlen=${#str1};

str2=${str1:0:$strlen-7};
echo $str2;

要删除最后 7 个字符:

$ var="COLUMN_NAME||','||"
$ echo "${var%???????}"
COLUMN_NAME

要删除 第一个 管道之后的所有内容:

$ echo "${var%%|*}"
COLUMN_NAME

https://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion
https://www.gnu.org/software/bash/manual/bashref.html#Pattern-Matching