我需要将 /tmp/myfile 中包含的所有单引号 ' 替换为 "(双引号)
我正在使用这个
sed -i 's/'/\"/g' /tmp/myfile
Run Code Online (Sandbox Code Playgroud)
和其他组合,但我找不到有效的方法。
请任何帮助。
从我记事起,我个人在使用 bash 时使用以下方法来更改输出文本的颜色:
red=$'\033[1;31m'
nc=$'\033[0m'
echo "${red}This is red text$nc"
Run Code Online (Sandbox Code Playgroud)
无论是在 macOS 还是 Linux 上使用,它总是对我有用。出于好奇,为了更好地理解它为什么起作用,我做了一些研究并发现了一些不包括$(red='\033[1;31m')的答案/示例。经过一些测试,如果我不使用$,输出颜色不会更改为红色,而只是打印字符串。但是,当使用sh而不是执行它时bash,文本确实会改变颜色。有人可以帮助我理解这是为什么吗?
我还用双引号而不是单引号对其进行了测试,并且它似乎仅在使用sh. 我将在下面发布示例。
这是我使用的脚本和代码:
#!/bin/bash
red=$'\033[1;31m'
nc=$'\033[0m'
echo "${red}Test 1$nc"
echo ""
##########################
red=$"\033[1;31m"
nc=$"\033[0m"
echo "${red}Test 2$nc"
echo ""
##########################
red='\033[1;31m'
nc='\033[0m'
echo "${red}Test 3$nc"
echo ""
##########################
red="\033[1;31m"
nc="\033[0m"
echo "${red}Test 4$nc"
echo ""
Run Code Online (Sandbox Code Playgroud)
使用 bash 和 sh 在 macOS 上输出:
Linux 上同时使用 bash 和 sh 的输出:
给定一个 YAML 文件example.yaml:
node:
sub_node:
get_this:
Run Code Online (Sandbox Code Playgroud)
我想获得一个包含get_this使用 Mike Farahyq和字符串的变量sub_node
yaml="$(cat example.yaml)"
nodename=sub_node
sub_yaml= "$(echo "$yaml" | yq -r '.$nodename' )";
# also tried -> sub_yaml= "$(echo "$yaml" | yq -r '.'"$nodename" )";
Run Code Online (Sandbox Code Playgroud)
请注意,这是一个人为的示例,实际上,该sub_node字符串事先并不知道,因此我需要替换该$nodename字符串。
我似乎无法弄清楚如何转义 所需的单引号查询字符串yq。
我该怎么做?
所以这段代码工作得很好,“$i”用双引号引起来:
for ((i=0; i <= 10; i++)); do
printf '%d\n' "$i"
done
Run Code Online (Sandbox Code Playgroud)
但是,如果我将“$i”放在单引号('$i')中,我只会得到 10 次迭代:
bash: printf: $i: invalid number
0
Run Code Online (Sandbox Code Playgroud)
为什么?这个问题包含一个错误报告,它不像每个人都说的那样具有哲学性。在确定这是一个“糟糕的问题”之前,我无法阅读互联网上的所有内容。
我可以在本地运行以下循环
for i in A B C; do mycommand $i; done
Run Code Online (Sandbox Code Playgroud)
现在我正尝试将其发送过来ssh
以下版本
ssh myhost for i in A B C; do mycommand $i; done
Run Code Online (Sandbox Code Playgroud)
以下版本
ssh myhost "for i in A B C; do mycommand $i; done"
Run Code Online (Sandbox Code Playgroud)
也失败了,因为它需要i本地变量。
如何处理?
有没有通用的方法,例如,如果mycommand是另一个 ssh 怎么办?
ssh myhost 'for i in hos1 host2 host3; do ssh "$i" ... another for expression
Run Code Online (Sandbox Code Playgroud) 1 '2 3' 4 5
在Linux下如何删除一个名为的文件?我用过的方法都没有效果。