【问题标题】:linux replace string with another stringlinux用另一个字符串替换字符串
【发布时间】:2017-03-07 13:18:48
【问题描述】:

我想替换文件中的字符串。 我有一个如下所示的文本文件:id#string.

123456#some new string
234567#some other new string
345678#still some other new string

然后我有很多基于文本文件 id 的文件夹。

所以现在我想替换文本文件中的字符串

{"fields":[{"t":"B","v":"false or true","n":"SomeText"},{"t":"S","v":"","n":"Keywords"},{"t":"S","v":"","n":"Author"},{"t":"S","v":"","n":"SomeText"},{"t":"S","v":"THI$ is THE old §TRING I want to REPLACE","n":"SomeText"},{"t":"S","v":"","n":"SomeText"},{"t":"A","n":"SomeText"},{"t":"A","v":"SomeInt","n":"SomeText"}]}

但我不知道该怎么做,因为新字符串和/或旧字符串可能包含其他字符

#!/bin/bash
FOLDER=`echo 123456#string | cut -d# -f1`
NEWSTRING=`echo 123456#string | cut -d# -f2`
sed -i ??? $FOLDER/filename.txt

感谢您的帮助

【问题讨论】:

  • 你应该如何识别 old 字符串以替换为 new 字符串? old 字符串是否总是相同的THI$ is THE old §TRING I want to REPLACE
  • 嗨 james,新字符串存储在文本文件 ID#STRING 我会在 for 循环中重置一个变量,但我不知道如何替换它
  • 我知道 new 字符串在第一个文件中。我应该用 new 字符串替换哪个 old 字符串?
  • 哦,这是第一条评论。向右滚动:“THI$ 是我想替换的旧 §TRING”
  • 不,它并不总是相同的,它总是不同的

标签: linux string bash replace sed


【解决方案1】:

这个问题并不清楚应该参与什么以及替换什么,但也许你需要的是:

#!/bin/bash
#
# t1 file contains your strings
#

ROW='{"fields":[{"t":"B","v":"false or true","n":"SomeText"},{"t":"S","v":"","n":"Keywords"},{"t":"S","v":"","n":"Aut
IFS=$'\n'
for S in $(cat ./t1); do
    F=$(echo $S | awk -F# '{print $1}')
    N=$(echo $S | awk -F# '{print $2}')
    if [ -z "$N" ]; then continue; fi
    NROW=$(echo ${ROW/THIS is THE old STRING I want to REPLACE/$S})
    NROW=$(echo ${NROW/Keywords/$N})
    NROW=$(echo ${NROW/false or true/$F})
    #mkdir $F
    #echo $NROW >> file.json
    echo $NROW 
done

【讨论】:

    猜你喜欢
    • 2019-05-14
    • 2013-12-03
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 2021-06-15
    • 1970-01-01
    相关资源
    最近更新 更多