linux - 如何处理引号,反引号特殊字符以在远程服务器中运行 linux bash shell 命令

标签 linux bash shell ansible sh

有人,请帮助我更正下面的命令我浪费了一天多的时间来修复下面但失败了,请帮助,我将在下面的 ansible shell 模块中使用。

 ssh -o ConnectTimeout=5 splunk@10.145.32.172 '
     sdline="`
           grep -n TA-aws-hf-{{client_code}}-{{env_name}} /opt/splunk/etc/system/local/serverclass.conf
          | awk -F \":\" \'{print $1}\'
         ` 
         && sed -ie \"$sdline,`
              echo $sdline + 3 
              | bc
         `d\"  /opt/splunk/etc/system/local/serverclass.conf
     " 
> ^C

甚至尝试了以下方式:

ssh -o ConnectTimeout=5 splunk@10.145.32.172 exec sdline=`grep -n TA-aws-hf-{{client_code}}-{{env_name}} /opt/splunk/etc/system/local/serverclass.conf|awk -F ":" '{print $1}'` && sed -ie "$sdline,`echo $sdline + 3|bc` d"  /opt/splunk/etc/system/local/serverclass.conf
grep: /opt/splunk/etc/system/local/serverclass.conf: No such file or directory
bash: line 0: exec: sdline=: not found

最佳答案

上下文:这个问题似乎起源于 XY Problem . OP 似乎想要删除包括字符串“TA-aws-hf-{{client_code}}-{{env_name}}”在内的 3 行。


反引号已弃用;必要时使用 $(modern $(command) substitution)。在这种情况下没有必要。

如果您的远程服务器有 GNU sed:

ssh splunk@10.145.32.172 'sed -i "/TA-aws-hf-{{client_code}}-{{env_name}}/,+2d" /opt/splunk/etc/system/local/serverclass.conf' 

如果这给你 sed: -e expression #1, char 19: unexpected ',':

ssh splunk@10.145.32.172 '
  cd /opt/splunk/etc/system/local
  awk "/TA-aws-hf-{{client_code}}-{{/ {i=-3} i++>0" \
    serverclass.conf > temp && mv $_ serverclass.conf
'

关于linux - 如何处理引号,反引号特殊字符以在远程服务器中运行 linux bash shell 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56522693/

相关文章:

python - 在 tar 文件中获取文件字节偏移量(和长度)的方法

java - 如何在 Java 中启动 shell 终端 session 并使用它来放置命令并读取其结果以保持先前的上下文

bash - 如何将 shell 设置为 bash 以便在 Capistrano 中运行?

Bash 十进制到 base 62 的转换

linux - 有没有办法使用它的输入在 GNU 中并行计算?

Linux 查找修剪和否定

linux - 如何在没有完整内核源代码树的情况下构建内核模块?

r - 在 Ubuntu 服务器上将 .R 文件转换为实际的 Shiny 应用程序

c++ - 无法在运行时找到共享对象。 KRPC

bash - 在 bash 中仅打印小于特定阈值的值