【问题标题】:use sed to add multiple strings between strings使用 sed 在字符串之间添加多个字符串
【发布时间】:2013-03-09 13:26:49
【问题描述】:

我正在使用 sed 对文本进行操作。输入类似于:

가가라  a b a e
블랙  c dd we df
사무소    as le we

我需要在上面添加一些格式,所以输出应该是:

id { id: "가가라" } value { val: "a b a e"} word { word: "가가라"}
id { id: "블랙" } value { val: "c dd we df"} word { word: "블랙"}
id { id: "사무소" } value { val: "as le we"} word { word: "사무소"}

问题是,我知道如何在 stings 之前和之后添加字符串:

在字符串开头添加字符串:

sed 's/^/id \{ id: \"/'

在字符串末尾添加字符串:

sed 's/$/\"\} word \{ word: \"/'

但是,当我尝试在每行末尾添加字符 가라 时,我尝试的这个命令不起作用:

sed -r 's/(id\s\{\sid:\s\")([^a-z]*)[\sa-z]{1,10}(\"\}\sword\s\{\sword:\s\")/\1\2\3\2/'

我也不确定如何在字符串 가라 和 a b a e 之间添加字符串。我尝试使用正则表达式,但似乎不起作用。

【问题讨论】:

    标签: string command-line sed


    【解决方案1】:

    从您的 sed 行看来,您似乎对匹配模式和替换感到困惑。

    试试这个 sed 行:

    sed -r 's/(\S+)\s*(.*)/id { id: "\1" } value { val: "\2"} word { word: "\1"}/' file
    

    用你的数据测试:

    kent$  echo "가가라  a b a e
    블랙  c dd we df
    사무소    as le we"|sed -r 's/(\S+)\s*(.*)/id { id: "\1" } value { val: "\2"} word { word: "\1"}/'                             
    id { id: "가가라" } value { val: "a b a e"} word { word: "가가라"}
    id { id: "블랙" } value { val: "c dd we df"} word { word: "블랙"}
    id { id: "사무소" } value { val: "as le we"} word { word: "사무소"}
    

    【讨论】:

    • 我明白了.. 是的,我确实混淆了替换和模式的概念。需要多练习。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    相关资源
    最近更新 更多