我想使用sed
将单个字符串分成两个不同的字符串。
例如:
STRING := folder1_test.abc_xxx
STRING1 := folder1_test
STRING2 := abc_xxx
or
STRING := folderB_test folderA_test.yyyy_xx
STRING1 := folderB_test folderA_test
STRING2 := yyyy_xx
所以无论是在dot(。)之前我想要的第一个字符串和点(。)之后我想要第二个字符串中的那个东西。
仅限sed
命令。正如我在makefile实现中使用的那样。
答案 0 :(得分:0)
使用tr
cmd:
echo 'folderB_test folderA_test.yyyy_xx' | tr "." "\n"
# gives folderB_test folderA_test
# yyyy_xx
使用cut(将分隔符设置为。并显示字段1(-f1)):
echo 'folderB_test folderA_test.yyyy_xx' | cut -d. -f1
# gives folderB_test folderA_test
使用cut(将分隔符设置为。并显示field2(-f2)):
echo 'folderB_test folderA_test.yyyy_xx' | cut -d. -f2
# gives yyyy_xx
#!/bin/bash
IN="bla@some.com;john@home.com"
#With tr cmd:
arr=$(echo $IN | tr ";" "\n")
#With sed cmd:
arr=$(echo $IN | sed 's/;/\'$'\n/g')
for x in $arr
do
echo "$x"
done
给出:
bla@some.com
john@home.com
答案 1 :(得分:0)
从你的帖子我明白你需要在Makefile中使用它(并且语法确认了这一点)。在这种情况下,这就是您所需要的:https://stackoverflow.com/a/8540718/3464942
例如:
STRING1 := $(firstword $(subst ., ,$(STRING)))
STRING2 := $(or $(word 2,$(subst ., ,$(STRING))),$(value 2))
答案 2 :(得分:0)
$ str='folder1_test.abc_xxx'
$ echo "${str%.*}"
folder1_test
$ echo "${str#*.}"
abc_xxx
$ str='folderB_test folderA_test.yyyy_xx'
$ echo "${str%.*}"
folderB_test folderA_test
$ echo "${str#*.}"
yyyy_xx
根据要求使用变量赋值替换echo
$ string='folderB_test folderA_test.yyyy_xx'
$ string1="${string%.*}"
$ echo "$string1"
folderB_test folderA_test
$ string2="${string#*.}"
$ echo "$string2"
yyyy_xx
注意:最好对用户定义的变量使用小写
答案 3 :(得分:0)
我认为它会回答你的问题。
sed 's/\(^\(.*\)\.\(.*\)$\)/STRING : \1\nSTRING 1: \2\nSTRING 2: \3/g'
例如:
sed's /(^(。)。(。)$)/ STRING:\ 1 \ nSTRING 1:\ 2 \ nSTRING 2:\ 3 / g'
folderB_test folderA_test.yyyy_xx //输入
STRING:folderB_test folderA_test.yyyy_xx
STRING 1:folderB_test folderA_test
STRING 2:yyyy_xx