相关疑难解决方法(0)

转义字符串以获取sed替换模式

在我的bash脚本中,我有一个外部(从用户接收)字符串,我应该在sed模式中使用它.

REPLACE="<funny characters here>"
sed "s/KEYWORD/$REPLACE/g"
Run Code Online (Sandbox Code Playgroud)

如何逃避$REPLACE字符串,以便sed作为文字替代品安全地接受?

注意:KEYWORD是一个没有匹配等的哑子串.它不是由用户提供的.

string escaping sed

296
推荐指数
6
解决办法
27万
查看次数

如何在awk脚本中使用shell变量?

我找到了一些办法通过外壳变量的awk脚本,但我感到困惑'".

首先,我尝试使用shell脚本:

$ v=123test
$ echo $v
123test
$ echo "$v"
123test
Run Code Online (Sandbox Code Playgroud)

然后尝试了awk:

$ awk 'BEGIN{print "'$v'"}'
$ 123test
$ awk 'BEGIN{print '"$v"'}'
$ 123
Run Code Online (Sandbox Code Playgroud)

为什么有区别?

最后我试过这个:

$ awk 'BEGIN{print " '$v' "}'
$  123test
$ awk 'BEGIN{print ' "$v" '}'
awk: cmd. line:1: BEGIN{print
awk: cmd. line:1:             ^ unexpected newline or end of string 
Run Code Online (Sandbox Code Playgroud)

我对此感到困惑.

bash shell awk

260
推荐指数
5
解决办法
46万
查看次数

用bash变量替换sed

尝试使用带有该行的bash脚本中的sed更改文本文件中的值,

sed 's/draw($prev_number;n_)/draw($number;n_)/g' file.txt > tmp
Run Code Online (Sandbox Code Playgroud)

这将是一个for循环.不知道为什么它不起作用.有什么建议?

bash sed substitution

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

在sed命令中转义正斜杠

BashSED我试图用URL替换js文件中的两个字符串.

当我运行.sh脚本时,应插入的两个url是输入参数.

./deploy.sh https://hostname.com/a/index.html https://hostname2.com/test
Run Code Online (Sandbox Code Playgroud)

然而,为了使我的sed命令这可用我要逃避所有向前斜杠:\\

./deploy.sh https:\\/\\/hostname.com\\/a\\/index.html https:\\/\\/hostname2.com\\/test
Run Code Online (Sandbox Code Playgroud)

如果它们被转义,则此SED命令适用于Mac OSX Sierra

APP_URL=$1
API_URL=$2

sed "s/tempAppUrl/$APP_URL/g;s/tempApiUrl/$API_URL/g" index.src.js > index.js
Run Code Online (Sandbox Code Playgroud)

现在我不想将转义的URL作为参数插入,我希望它自己的脚本能够转义正斜杠.

这就是我尝试过的:

APP_URL=$1
API_URL=$2

ESC_APP_URL=(${APP_URL//\//'\\/'})
ESC_API_URL=(${API_URL//\//'\\/'})

echo 'Escaped URLS'
echo $ESC_APP_URL
#Echos result: https:\\/\\/hostname.com\\/a\\/index.html 
echo $ESC_API_URL
#Echos result: https:\\/\\/hostname2.com\\/test

echo "Inserting app-URL and api-URL before dist"
sed "s/tempAppUrl/$ESC_APP_URL/g;s/tempApiUrl/$ESC_API_URL/g" index.src.js > index.js
Run Code Online (Sandbox Code Playgroud)

参数看起来相同,但在这种情况下,SED会抛出错误

sed: 1: "s/tempAppUrl/https:\\/\ ...": bad flag in substitute command: '\'
Run Code Online (Sandbox Code Playgroud)

谁能告诉我这里的区别?字符串看起来相同,但给出不同的结果.

bash shell sed

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

检查文件中是否存在多个字符串或正则表达式

我想检查我的所有字符串是否存在于文本文件中.它们可以存在于同一条线上或不同的线上.部分匹配应该没问题.像这样:

...
string1
...
string2
...
string3
...
string1 string2
...
string1 string2 string3
...
string3 string1 string2
...
string2 string3
... and so on
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我们可以用正则表达式代替字符串.

例如,以下代码检查文件中是否存在任何字符串:

if grep -EFq "string1|string2|string3" file; then
  # there is at least one match
fi
Run Code Online (Sandbox Code Playgroud)

如何检查是否所有这些都存在?由于我们只对所有匹配项的存在感兴趣,因此我们应该在所有字符串匹配后立即停止读取文件.

是否有可能做到这一点,而不必调用grep多次(不会标尺时输入文件较大,或者如果我们有一个大量的字符串相匹配),或使用工具,如awkpython

此外,是否有一个字符串的解决方案可以很容易地扩展为正则表达式?

bash search grep

18
推荐指数
3
解决办法
2961
查看次数

sed:替换多个模式,但不能使用相同的字符串

是否可以在同一命令中将多个模式更改为不同的值?让我说我有

A B C D ABC
Run Code Online (Sandbox Code Playgroud)

我想将每个A改为1,每个B改为2,每个C改为3

所以输出会是

1 2 3 D 123
Run Code Online (Sandbox Code Playgroud)

因为我有3个模式要改变,我想避免单独替换它们.我以为会有类似的东西

sed -r s/'(A|B|C)'/(1|2|3)/ 
Run Code Online (Sandbox Code Playgroud)

但当然这只是将A或B或C替换为(1 | 2 | 3).我应该提一下,我的真实模式比那更复杂......

谢谢!

bash sed

7
推荐指数
2
解决办法
7152
查看次数

有没有办法让ADODB与Excel for Mac 2011一起使用?

我似乎无法使用我的Excel工作簿(使用ADODB)来使用Excel Mac 2011.我正在使用ADODB代码.是否有可用的插件?即使是来自第三方?有没有人得到这个工作?

macos excel vba ado excel-vba excel-vba-mac

6
推荐指数
2
解决办法
8520
查看次数

Sed错误:替换表达式中的错误选项

我有一个配置文件(gpsd.default)包含具有以下格式的数据:

# If you must specify a non-NMEA driver, uncomment and modify the next line     
GPSD_SOCKET="/var/run/gpsd.sock"                                                
GPSD_OPTIONS=""                                                                
GPS_DEVICES="" 
Run Code Online (Sandbox Code Playgroud)

我用sed对文件进行了更改:

sed -i 's/^GPS_DEVICES="".*/GPS_DEVICES="dev/ttyUSB1"/' /etc/default/gpsd.default
or 
sed -i '4s/^.*/GPS_DEVICES="dev/ttyUSB1"/' /etc/default/gpsd.default
Run Code Online (Sandbox Code Playgroud)

上面的sed命令返回错误:

sed:替换表达式中的错误选项

因为新行在/其表达式中包含" ".

如何更新我的sed命令使其工作?

linux bash shell sed

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

sed-ish oneliner 在替换中执行算术

我有一个 form 字符串FOO_123_BAR.bazquux,其中FOOBAR是固定字符串,123是一个数字并且bazquux是自由格式的文本。

我需要对这个字符串执行文本转换:提取123bazquux,增加数字,然后将它们排列在不同的字符串中。
例如,FOO_123_BAR.bazquux? FOO=124 BAR=bazquux. (实际转换更复杂。)

自然地,我可以在一系列 sed 和 expr 调用中做到这一点,但它很难看:

shopt -s lastpipe

in=FOO_123_BAR.bazquux
echo "$in" | sed -r 's|^FOO_([0-9]+)_BAR\.(.+)$|\1 \2|' | read number text
out="FOO=$((number + 1)) BAR=$text"
Run Code Online (Sandbox Code Playgroud)

是否有更强大的文本处理工具可以在一次调用中完成这项工作?如果是,那么如何?


编辑:我很抱歉没有更清楚地说明这一点,但输入和输出的确切结构是一个例子。因此,我更喜欢使用任何分隔符或不存在分隔符的通用解决方案,而不是依赖于例如存在下划线的解决方案。

bash awk sed

5
推荐指数
2
解决办法
117
查看次数

在文件中的特定文本之后插入文本

我想将输出插入到文件中...在特定文本之后的下一行。

在我的输出(Text1.txt)中,我有不同的域名行:

hxxp://example1.com
hxxp://example2.com
Run Code Online (Sandbox Code Playgroud)

我想将此行插入到另一个文本文件(Text2.txt)中包含文本“URLs found”的行之后(注意:我不知道行号)。

bla
bla
bla
URLs found
hxxp://example1.com
hxxp://example2.com
bla
bla
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

bash shell

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

标签 统计

bash ×8

sed ×6

shell ×4

awk ×2

ado ×1

escaping ×1

excel ×1

excel-vba ×1

excel-vba-mac ×1

grep ×1

linux ×1

macos ×1

search ×1

string ×1

substitution ×1

vba ×1