简体   繁体   English

如何使用sed从字符串中的特定点提取文本?

[英]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实现中使用的那样。

One command line: 一个命令行:

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

Store result in an array and read it: 将结果存储在数组中并读取它:

#!/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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM