用自己的子串bash替换字符串

时间:2016-09-06 06:05:38

标签: string bash shell replace substring

我有

字符串
.. 23 { ..

我希望结果看起来像

.. { "No":"23" ..

我需要在Bash脚本中执行此操作。请帮忙。提前谢谢。

需要一个解决方案,用 {“No”:“DD”替换所有出现的 DD {。 'D'是数字

3 个答案:

答案 0 :(得分:0)

使用sed

sed 's/\(23\)\s*{/{"No":"\1"/g' file

<强>更新

sed 's/\([0-9]\+\)\s*{/{"No":"\1"/g' file

答案 1 :(得分:0)

用bash。

http://www.linuxjournal.com/content/bash-regular-expressions

此网站上有一个脚本,向您展示如何处理匹配的正则表达式。

我只是把它复制到这个答案。

#!/bin.bash

if [[ $# -lt 2 ]]; then
    echo "Usage: $0 PATTERN STRINGS..."
    exit 1
fi
regex=$1
shift
echo "regex: $regex"
echo

while [[ $1 ]]
do
    if [[ $1 =~ $regex ]]; then
        echo "$1 matches"
        i=1
        n=${#BASH_REMATCH[*]}
        while [[ $i -lt $n ]]
        do
            echo "  capture[$i]: ${BASH_REMATCH[$i]}"
            let i++
        done
    else
        echo "$1 does not match"
    fi
    shift
done

答案 2 :(得分:0)

匹配两位数后跟任意数量的空格{

$ s=".. 35 { .."
$ [[ $s =~ ([0-9][0-9])\ *\{ ]]
$ ms="${s/${BASH_REMATCH[0]}/{ \"No\":\"${BASH_REMATCH[1]}\"}"
$ echo "$ms"
.. { "No":"35" ..

$ s=".. 23 { .."
$ [[ $s =~ ([0-9][0-9])\ *\{ ]]
$ ms="${s/${BASH_REMATCH[0]}/{ \"No\":\"${BASH_REMATCH[1]}\"}"
$ echo "$ms"
.. { "No":"23" ..

匹配一个或多个数字,后跟任意数量的空格和{

$ s=".. 25233 { .."
$ [[ $s =~ ([0-9]+)\ *\{ ]]
$ ms="${s/${BASH_REMATCH[0]}/{ \"No\":\"${BASH_REMATCH[1]}\"}"
$ echo "$ms"
.. { "No":"25233" ..