linux - 如何处理引号,反引号特殊字符以在远程服务器中运行 linux bash shell 命令
问题描述
有人,请帮我纠正下面的命令,我在下面浪费了一天多的时间修复但失败了,请帮助,我将在下面的 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 似乎想要删除 3 行,包括字符串“TA-aws-hf-{{client_code}}-{{env_name}}”。
反引号已弃用;必要时使用$(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
'
推荐阅读
- google-sheets - Google 表格可以从 Google 文档中获取信息吗?
- python - 自定义关键字机器人框架selenium webdriver python“对象没有属性'get_attribute'”
- python - 合并在 Python 中无法正常工作,重复列
- azure - 使用 EventProcessorHost 时,事件中心中的传出消息多于传入消息
- reactjs - React/Webpack 4:需要建议,从文件夹中选择性加载 svg 的最佳实践
- python - 在 flask-sqlalchemy 中计算当天的总发生次数
- javascript - Javascript正则表达式:重复非捕获组
- java - 如何用最后一行更改二维数组的第一行?
- google-maps - 带有单个蜂窝塔的 Google Maps Geolocation API 经常返回“找不到错误 404 地理位置”
- reactjs - 使用 CookPete/react-player 从 S3 播放 HLS 视频