Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.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
Linux 删除一个字符串和另一个字符串第一次出现之间的文本_Linux_Awk_Sed - Fatal编程技术网

Linux 删除一个字符串和另一个字符串第一次出现之间的文本

Linux 删除一个字符串和另一个字符串第一次出现之间的文本,linux,awk,sed,Linux,Awk,Sed,我已经找到了几种方法来删除两个字符串之间的文本,但我想我的情况有点不同 我正在尝试转换以下内容: /nz/kit.7.2.0.7/bin/adm/tools/hostaekresume 为此: /nz/kit/bin/adm/tools/hostaekresume 基本上从文件名中删除特定于版本的信息。 我找到的解决方案删除了从单词kit到最后出现的/的所有内容。我需要从kit中删除一些内容,直到第一次出现 我见过的最常见的解决方案是: sed -e 's/\(kit\).*\(\/\)/\

我已经找到了几种方法来删除两个字符串之间的文本,但我想我的情况有点不同

我正在尝试转换以下内容:

/nz/kit.7.2.0.7/bin/adm/tools/hostaekresume
为此:

/nz/kit/bin/adm/tools/hostaekresume
基本上从文件名中删除特定于版本的信息。 我找到的解决方案删除了从单词
kit
到最后出现的
/
的所有内容。我需要从
kit
中删除一些内容,直到第一次出现

我见过的最常见的解决方案是:

sed -e 's/\(kit\).*\(\/\)/\1\2/'
产生:

/nz/kit/hostaekresume

如何最多只能删除第一个
/
?我假设这可以用sed或awk来完成,但是可以接受建议。

对于非贪婪正则表达式,您需要
perl
sed
还没有这样做。 另外,使用
|
作为分隔符,因为
/
在正则表达式中时可能会导致混淆

perl-pe的|(kit)。*?(/.*)|\1\2 |'

*
后面的
使模式非贪婪,并将匹配
/
的第一个实例

echo”/nz/kit.7.2.0.7/bin/adm/tools/hostaekresume“| perl-pe的|(kit)。*?(/.*)|\1\2 |”

返回值
/nz/kit/bin/adm/tools/hostaekresume

$ sed 's|\(kit\)[^/]*|\1|' <<< '/nz/kit.7.2.0.7/bin/adm/tools/hostaekresume'
/nz/kit/bin/adm/tools/hostaekresume
语法为
${parameter/pattern/string}
,其中展开的
参数
中的
模式
替换为
字符串
。如果我们使用
/
而不是
/
,则会替换所有引用,而不仅仅是第一个引用


在我们的例子中,
参数
var
,模式是
[[:digit:][.]
(数字或点–顺便说一下,这是一个全局模式,不是正则表达式),我们跳过了
/string
部分,它只是删除了模式(将其替换为零).

我想我应该提到我不知道7.2.0.7的位置会有什么,所以我无法搜索。我只知道它以“kit”开头,以第一个“/”结尾。
$ var='/nz/kit.7.2.0.7/bin/adm/tools/hostaekresume'
$ echo "${var//[[:digit:].]}"
/nz/kit/bin/adm/tools/hostaekresume
echo "/nz/kit.7.2.0.7/bin/adm/tools/hostaekresume" | awk '{sub(/.7.2.0.7/,"")}1'
/nz/kit/bin/adm/tools/hostaekresume