Bash将字符替换为=分隔值

时间:2017-06-04 14:21:40

标签: bash

我有以下脚本:

var openMNav.isDropDown = false;

生成包含以下内容的文件:

#!/bin/bash

SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
  DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
  SOURCE="$(readlink "$SOURCE")"
  [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
done

SCRIPT_PATH="$( cd -P "$( dirname "$SOURCE" )" && pwd )"/..

grep -o -P "(\w*_?)*=(\"|\').*(\"|\')" ${SCRIPT_PATH}/start.sh  > ${SCRIPT_PATH}/run.env

来自包含内容的文件:

SOME_VAR="13434"
ANOTHER_VAR="BlAH BLAH BLAH"

但现在我想从生成的结果中删除(修剪) STARTING TAILING asdf SOME_VAR="13434"\ ANOTHER_VAR= "BlAH BLAH BLAH" some other strings 字符。就我而言,我希望它的结果是:

"

你有什么想法我能做到吗?

3 个答案:

答案 0 :(得分:1)

单个sed电话可以解决问题:

sed -e 's/\([^=]*=\)"/\1/g' -e 's/"$//' file1 > file2

第一个正则表达式仅匹配第一个=之后的引号,而第二个正则表达式仅匹配该行末尾的引号。

应该注意的是,如果您尝试在Bash中获取或执行它,则生成的文件将抛出错误,因为Bash不允许ANOTHER_VAR=BlAH BLAH之类的内容。

答案 1 :(得分:1)

尝试:

awk '{sub(/"$/,"");sub(/="/,"=")} 1'   Input_file

简单地替换最后一次出现的"用NULL代替="用=。然后在那里提到1来打印编辑/未编辑的行

答案 2 :(得分:0)

grep -oP '[^\s]+\s*=\s*"[^"]+"' file |sed 's/=\s*"\([^"]*\)"/=\1/'

-o仅匹配单引号中的内容

-P perl-like regexp

[^\s]+非空格字符

sed删除引号