shell脚本命令使用变量分隔符拆分字符串

时间:2013-11-10 02:40:14

标签: bash shell

我想在具有以下条件的bash shell脚本中拆分字符串。

1)分隔符是变量

2)分隔符是多个角色

示例:

A quick brown fox
var=brown

我想将字符串拆分为A quickbrown fox,但使用变量var作为分隔符,而不是brown

5 个答案:

答案 0 :(得分:8)

#!/bin/bash

#variables according to the example
example="A quick brown fox"
var="brown"

#the logic (using bash string replacement)
front=${example%${var}*}
rear=${example#*${var}}

#the output
echo "${front}"
echo "${var}"
echo "${rear}"

答案 1 :(得分:1)

这听起来像你实际要求的那样(保留结果中的分隔符):

str="A quick brown fox"
var="brown "
result=$(echo ${str} | sed "s/${var}/\\n${var}/g")

这可能是您实际意味着的(从原始字符串中删除分隔符):

str="A quick really brown fox"
var=" really "
result=$(echo ${str} | sed "s/${var}/\\n/g")

您可以运行以验证结果:

IFS=$'\n'
for item in ${result[@]}; do
    echo "item=${item}."
done

答案 2 :(得分:0)

result=$(echo "${str}" | awk 'gsub("${var}","${var}\n")

答案 3 :(得分:0)

你提出的问题不是很好,因为你的分裂应该显示"A quick "(带有尾随空格)。您甚至不知道如何给出输出(在一个数组中,在两个单独的变量中......)。从来没有,让我以自己的方式重述你的问题,并回答这个重新提出的问题。如果它不是您想要的,您将知道如何修改原始帖子。

给定字符串s和正则表达式var,为数组a提供两个字段a[0]a[1],以便连接这两个字段数组a的数量为sa[1] =~ ^var.* a[1]为最小(非贪婪)匹配。

嗯,这已经存在于bash中了:

[[ $s =~ ^(.*)($var.*)$ ]]
a=( "${BASH_REMATCH[@]:1}" )

查找

$ s="A quick brown fox"
$ var=brown
$ [[ $s =~ ^(.*)($var.*)$ ]]
$ a=( "${BASH_REMATCH[@]:1}" )
$ declare -p a
declare -a a='([0]="A quick " [1]="brown fox")'
$

答案 4 :(得分:0)

可以使用100%bash内部命令完成:

#!/bin/bash

#variables according to the example
example="A quick brown fox"
var="brown"

#the logic (using bash string replacement)
front=${example%"$var" *}
rear=${example/"$front"/}

#the output
echo "$front"
echo "$rear"