相关疑难解决方法(0)

sed 从文件加载替代品

我正在尝试使用 sed 将文件中的模式替换为另一个文件的完整内容。

目前我正在使用:

sed "s/PATTERN/`cat replacement.txt`/g" "openfile.txt" > "output.txt"
Run Code Online (Sandbox Code Playgroud)

但是,如果替换文件包含任何字符,例如', ", 或者/由于输入未经过清理而开始出现错误。

我一直在尝试使用本指南来帮助我,但我发现很难遵循。如果我尝试建议的r file命令,我只会得到一个字符串。

解决这个问题的最佳方法是什么?

sed text-processing

10
推荐指数
1
解决办法
1万
查看次数

如何用另一个文件中的一段文本替换文件中两个标记之间的文本?

假设我有一个文本块~/.bashrc

#~/.bashrc
# ...some commands...

# aliases
alias suicide='sudo rm -rf /'
# end aliases

# other commands
Run Code Online (Sandbox Code Playgroud)

我希望用另一个文件中两个标记之间包含的其他一些文本替换该文本块: stuff-to-place-in-bashrc.txt

# stuff-to-place-in-bashrc.txt
# ...stuff...

# aliases
alias ldir='ls * -d'
alias ithinklifeisworthliving='echo all good'
# end aliases

# ...more stuff...
Run Code Online (Sandbox Code Playgroud)

我试过了

 sed -ne 's/# aliases\s+\(.*\)\s+# end aliases/\1/' stuff-to-place-in-bashrc.txt
Run Code Online (Sandbox Code Playgroud)

但我真的在这里的黑暗中摇摆不定。有人可以帮我吗?

  1. 如何从 中提取文本stuff-to-place-in-bashrc.txt

  2. 如何~/.bashrc用问题 1 中提取的文本替换其他部分?

编辑

感谢更新家伙,那些想知道为什么我会想要这样的东西:

允许对脚本文件进行精心挑选的更新,而无需覆盖用户添加的内容。对共享和经常更新的标准操作环境很有用(比如我在Tyro 的最后一份工作是用 XP 编码的)。

去疯狂的家伙。

bash text-processing regular-expression

10
推荐指数
1
解决办法
3094
查看次数

在另一个文件中匹配模式后从文件内嵌插入文本

我正在尝试使用 sed 获取文件的内容并将其插入到另一个文件中的匹配模式之后。我的问题与此问题非常相似,但我希望插入文件的内联内容而不是新行。我怎样才能做到这一点?

使用我引用的示例问题,第一个答案正是我想要的;但是,我希望插入发生内联:

sed '/First/r file1.txt' infile.txt 
Run Code Online (Sandbox Code Playgroud)

我要插入的实际数据是一个 JSON 文件:

[
    {
        "foo": "bar", 
        "baz": "biff",
        "data": [
            {
                "a": 1945619, 
                "b": [
                    {
                        "c": 512665, 
                        "d": "futz"
                    }
                ]
            }
        ]
    }
]
Run Code Online (Sandbox Code Playgroud)

sed awk text-processing

8
推荐指数
3
解决办法
8370
查看次数

如何在文件中的某个字符串后插入文件内容?

我们有例如这个文件

cat exam.txt

I am expert linux man
what we can do for out country
I love redhat machine
"propertie"
centos less then redhat
fedore what
my name is moon yea
Run Code Online (Sandbox Code Playgroud)

我们想在属性行之后添加任何文件的内容作为 file.txt

cat file.txt

324325
5326436
3245235
646346
545
643
6436
63525
664
46454
Run Code Online (Sandbox Code Playgroud)

所以我尝试以下操作:

a=` cat file `

sed -i '/propertie/a  `echo "$a"` ' exam.txt
Run Code Online (Sandbox Code Playgroud)

但不起作用

有什么建议可以使用 sed/awk/perl 一行来在某个字符串后添加文件内容?

预期产出

I am expert linux man
what we can do for out country
I love redhat machine
"propertie"
    324325 …
Run Code Online (Sandbox Code Playgroud)

sed awk perl shell-script text-processing

2
推荐指数
1
解决办法
967
查看次数