Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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
Regex 使用正则表达式进行linux shell脚本字符串操作_Regex_Linux_Shell - Fatal编程技术网

Regex 使用正则表达式进行linux shell脚本字符串操作

Regex 使用正则表达式进行linux shell脚本字符串操作,regex,linux,shell,Regex,Linux,Shell,我搜索了很多文档,我认为这是可能的 我想使用字符串操作从字符串中删除(任何)重复字符,如下所示: #!/bin/bash var = "aabbcc112233" var = $(var//(.)\1/1\/g} # this must be wrong... echo var = $var 结果必须是: var = abc123 我发现了很多sed的例子,等等。。。是否可以仅使用字符串操作和正则表达式来解决此问题?不是别人指挥吗 致以最诚挚的问候。我们可以在此处使用背景参考: echo "

我搜索了很多文档,我认为这是可能的

我想使用字符串操作从字符串中删除(任何)重复字符,如下所示:

#!/bin/bash
var = "aabbcc112233"
var = $(var//(.)\1/1\/g} # this must be wrong...
echo var = $var
结果必须是:

var = abc123
我发现了很多sed的例子,等等。。。是否可以仅使用字符串操作和正则表达式来解决此问题?不是别人指挥吗


致以最诚挚的问候。

我们可以在此处使用背景参考:

echo "aabbcc112233" | sed 's/\(.\)\1*/\1/g'

abc123

这里的技巧是匹配
(.)
,任何字符,可选地后跟相同的字符,任意次数,包括零。然后,我们就用一个字母代替。这将有效地删除所有相邻的重复字母。

因为正则表达式只是字符串匹配的一种模式,没有工具它无法操作字符串。不幸的是,shell没有内置的工具来实现这一点,这就是为什么我们需要
sed
awk

但由于“没有其他命令”,我不认为regex是一个选项。我想“字符串操作”是指shell扩展

我认为有一些方法可以做到这一点,只要使用bash内置和shell扩展。以下是一个例子:

#!/bin/sh
#
dup="$1"
# give $dup's first character to $uni
uni=${dup:0:1}

while [ "$dup" ]
do
    # then remove dup's first character
    dup=${dup#?}
    # now if $dup's first NOT equal to $uni's last, append it to $uni
    if [ "${uni: -1:1}" != "${dup:0:1}" ]; then
        uni+=${dup:0:1}
    fi 
done
# we have $uni at last
echo $uni

我已经推翻了你的否决票,请你也为我这样做。