相关疑难解决方法(0)

Bash中单引号和双引号之间的区别

在Bash中,单引号('')和双引号("")之间有什么区别?

syntax bash shell quotes

501
推荐指数
6
解决办法
17万
查看次数

sed就地标志,适用于Mac(BSD)和Linux

是否有一个sedtodo就地编辑的调用,没有可在Linux和Mac上运行的备份?虽然BSD sed随OS X似乎需要sed -i '' …,在GNU sedLinux的发行版通常都与解释的报价为空,输入文件名(而不是备份扩展),并且需要sed -i …替代.

是否有任何命令行语法适用于这两种风格,所以我可以在两个系统上使用相同的脚本?

linux macos bsd sed

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

是否可以使用sed可靠地转义正则表达式元字符

我想知道是否有可能编写一个100%可靠的sed命令来转义输入字符串中的任何正则表达式元字符,以便它可以在后续的sed命令中使用.像这样:

#!/bin/bash
# Trying to replace one regex by another in an input file with sed

search="/abc\n\t[a-z]\+\([^ ]\)\{2,3\}\3"
replace="/xyz\n\t[0-9]\+\([^ ]\)\{2,3\}\3"

# Sanitize input
search=$(sed 'script to escape' <<< "$search")
replace=$(sed 'script to escape' <<< "$replace")

# Use it in a sed command
sed "s/$search/$replace/" input
Run Code Online (Sandbox Code Playgroud)

我知道有更好的工具可以使用固定字符串而不是模式,例如awk,perlpython.我想证明是否有可能sed.我会说让我们专注于基本的POSIX正则表达式,以获得更多乐趣!:)

我已经尝试了很多东西,但任何时候我都能找到一个打破了我的尝试的输入.我认为保持它是抽象的,因为script to escape不会导致任何人走错方向.

顺便说一下,讨论在这里提出来了.我认为这可能是收集解决方案的好地方,可能会破坏和/或详细说明.

regex sed

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

如何在sed命令中使用变量?

我有abc.sh:

exec $ROOT/Subsystem/xyz.sh
Run Code Online (Sandbox Code Playgroud)

在Unix机器上,如果我打印,echo $HOME那么我得到/HOME/COM/FILE.

我想更换$ROOT$HOME使用sed的.

预期产出:

exec /HOME/COM/FILE/Subsystem/xyz.sh
Run Code Online (Sandbox Code Playgroud)

我试过了,但我没有得到预期的输出:

sed  's/$ROOT/"${HOME}"/g' abc.sh > abc.sh.1
Run Code Online (Sandbox Code Playgroud)

加成:

如果我有 abc.sh

exec $ROOT/Subsystem/xyz.sh $ROOT/ystem/xyz1.sh
Run Code Online (Sandbox Code Playgroud)

然后用

sed "s|\$INSTALLROOT/|${INSTALLROOT}|" abc.sh
Run Code Online (Sandbox Code Playgroud)

它只是首先替换$ROOT,即输出即将到来

exec /HOME/COM/FILE/Subsystem/xyz.sh $ROOT/ystem/xyz1.sh
Run Code Online (Sandbox Code Playgroud)

unix sed

52
推荐指数
2
解决办法
11万
查看次数

如何为sed替换命令使用不同的分隔符?

我正在编写一个shell脚本来创建一些配置文件.我必须替换文件中的一些模式,并且应该用路径替换一个模式.

所以我的问题是:有没有办法用路径替换我的占位符webpath而不在斜杠前面设置反斜杠?

也许有另一种工具可以做到这一点?

sed

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

在sed命令中使用变量

我似乎无法在sed命令中使用变量,例如:

sed "24s/.*/"$ct_tname"/" file1.sas > file2.sas
Run Code Online (Sandbox Code Playgroud)

我想要$ct_tname变量,而不是字面意思$ct_tname,这是我不断得到的.

有谁知道如何让这个工作?

问题实际上更复杂,我省略了一些信息.

ct_fname="%let outputfile="/user/ct_"$1".csv";"
Run Code Online (Sandbox Code Playgroud)

这里$1是在我的bash脚本开始时传入的参数(sed是在bash脚本中运行的).

这不正常运行,但是它确实运行,如果我取代ct_fname

ct_fname="%let table=ct_$1;"
Run Code Online (Sandbox Code Playgroud)

有没有办法让第一个ct_fname成功通过?

variables bash escaping sed

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

用变量替换文本

我怎样才能做到这一点?

sed -i 's/wiki_host/$host_name/g' /root/bin/sync
Run Code Online (Sandbox Code Playgroud)

它将取代wiki_host文本$host_name.但我想用变量的内容替换它..

我试过了

sed -i 's/wiki_host/${host_name}/g' /root/bin/sync
Run Code Online (Sandbox Code Playgroud)

它也不起作用.

linux variables bash sed

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

sed脚本中的Shell变量

sed命令在命令提示符下按预期工作,但在shell脚本中不起作用.

new_db_name=`echo "$new_db_name" | sed 's/$replace_string/$replace_with/'`
Run Code Online (Sandbox Code Playgroud)

为什么会这样,我该如何解决?

sed

17
推荐指数
3
解决办法
6万
查看次数

如何使用sed的bash脚本变量

我执行以下bash脚本:

#!/bin/bash
version=$1
echo $version
sed 's/\${version.number}/$version/' template.txt > readme.txt
Run Code Online (Sandbox Code Playgroud)

我期望用变量"version"的内容替换$ {version.number}的所有实例.而是插入文字文本$ version.

我需要做什么才能使sed使用$ version的当前值?

bash scripting sed

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

sed 用变量替换值

我的配置中有一个变量,我想用一个值替换它。

ROOT="rROOT"
Run Code Online (Sandbox Code Playgroud)

我想将其替换为

ROOT="$root"
Run Code Online (Sandbox Code Playgroud)

$root 的值也是如此(重要的是引号)。

到目前为止我已经尝试过这种方式

sed -i s/'ROOT=rROOT'/'ROOT="$root"'/g $directory/settings.conf
Run Code Online (Sandbox Code Playgroud)

结果是

ROOT="$root"
Run Code Online (Sandbox Code Playgroud)

但这存储在变量 $root 中(它始终是一个路径)

root: /
Run Code Online (Sandbox Code Playgroud)

如何用 $root 的值替换 rROOT?

Sed 版本:(GNU sed)4.2.2

bash shell sed

4
推荐指数
1
解决办法
9351
查看次数

标签 统计

sed ×9

bash ×5

linux ×2

shell ×2

variables ×2

bsd ×1

escaping ×1

macos ×1

quotes ×1

regex ×1

scripting ×1

syntax ×1

unix ×1