[英]How to extract text from a particular point in string using sed?
I want to break single string into two different strings using sed
. 我想使用
sed
将单个字符串分成两个不同的字符串。
For eg: 例如:
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
So whatever is before dot(.) I want in first string and after dot(.) I want that thing in second string. 所以我想要在第一个字符串中的点(。)之前和之后在第二个字符串中的点(。)之后的任何东西。
Specifically with sed
command only. 特别是仅使用
sed
命令。 As I am using in makefile implementation. 正如我在makefile实现中使用的那样。
With tr
cmd: 使用
tr
cmd:
echo 'folderB_test folderA_test.yyyy_xx' | tr "." "\n"
# gives folderB_test folderA_test
# yyyy_xx
With cut (set delimiter to . and display field 1 (-f1)): 带剪切(将定界符设置为。并显示字段1(-f1)):
echo 'folderB_test folderA_test.yyyy_xx' | cut -d. -f1
# gives folderB_test folderA_test
With cut (set delimiter to . and display field2 (-f2)): 带剪切(将定界符设置为。并显示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
Gives: 给出:
bla@some.com
john@home.com
From your post I understand that you need this in a Makefile (and the syntax is confirming this). 从您的帖子中,我了解到您需要在Makefile中使用它(语法正在确认这一点)。 In that case this is what you need: https://stackoverflow.com/a/8540718/3464942
在这种情况下,这就是您需要的: https : //stackoverflow.com/a/8540718/3464942
For example: 例如:
STRING1 := $(firstword $(subst ., ,$(STRING)))
STRING2 := $(or $(word 2,$(subst ., ,$(STRING))),$(value 2))
Using parameter expansion 使用参数扩展
$ 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
replace echo
with variable assignment as per requirement 根据要求用变量分配替换
echo
$ string='folderB_test folderA_test.yyyy_xx'
$ string1="${string%.*}"
$ echo "$string1"
folderB_test folderA_test
$ string2="${string#*.}"
$ echo "$string2"
yyyy_xx
Note: It is preferable to use lowercase for user defined variables 注意:对于用户定义的变量,最好使用小写字母
I think it will answer your question. 我认为它将回答您的问题。
sed 's/\\(^\\(.*\\)\\.\\(.*\\)$\\)/STRING : \\1\\nSTRING 1: \\2\\nSTRING 2: \\3/g'
Ex: 例如:
sed 's/(^(. ).(. )$)/STRING : \\1\\nSTRING 1: \\2\\nSTRING 2: \\3/g'
SED的/(。^()()$)/ STRING:\\ 1 \\ nSTRING 1:\\ 2 \\ nSTRING 2:\\ 3 / G'
folderB_test folderA_test.yyyy_xx //input
folderB_test folderA_test.yyyy_xx //输入
STRING : folderB_test folderA_test.yyyy_xx
STRING:folderB_test文件夹A_test.yyyy_xx
STRING 1: folderB_test folderA_test
STRING 1:folderB_test文件夹A_test
STRING 2: yyyy_xx
STRING 2:yyyy_xx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.