查询使用sed命令执行脚本

时间:2018-04-21 12:39:02

标签: linux shell sed

我有一个配置文件,其中需要使用脚本删除对象的键值对。有没有办法只通过sed命令删除它。

我的示例文件显示在此处:

define({
name: 'ABC',
defaultApp: 'abc',
plugin: 'plugin',
loadOverride: 'load.json',
components: [
    {
        path: 'upm'
    },
    {
        path: 'ech'
    },
    {
        path: 'hb'
    },
    {
        path: 'st'
    },
    {
        path: 'fo'
    },
    {
        path: 'cm'
    },
    {
        path: 'si'
    }
] });

预期产出:

define({
name: 'ABC',
defaultApp: 'abc',
plugin: 'plugin',
loadOverride: 'load.json',
components: [
    {
        path: 'hb'
    },
    {
        path: 'fo'
    },
    {
        path: 'cm'
    }
] });

目前,我在我的脚本中使用这些行:

declare CONFIG_JS=/var/www/html/config.js    
sed -i 's/upm/fo/' $CONFIG_JS               //replacing upm with fo
sed -i 's/ech/cm/' $CONFIG_JS               //replacing upm with fo
sed -i -n -e :a -e '1,14!{P;N;D;};N;ba' $CONFIG_JS  //deleting last 14 lines
sed -i '$ a\    ]' $CONFIG_JS            // appending  ] in last line
sed -i '$ a\});' $CONFIG_JS              // appending  }); in last line

我正在获得预期的输出,但是当我的脚本执行此行

sed -i '$ a\    ]' $CONFIG_JS

我的整个文件都覆盖了^ M个蓝色字符。任何人都可以建议我从config.js文件中删除^ M字符的方法,以及可能的原因可能是什么?

其次,我想在下面的命令中询问

sed -i -n -e :a -e '1,14!{P;N;D;};N;ba' $CONFIG_JS

有没有办法从最后一行开始删除最后14行,即总数是否。线条是50然后我必须从第48行到第14行删除。

谢谢..

1 个答案:

答案 0 :(得分:-1)

sed "/{/{N;N;};/path: 'upm'/d"

翻译:如果有一个左括号('{'),除了这一行之外还要抓住接下来的两行,如果它(三行)包含“path'upm'”,则将其删除。