我尝试使用以下命令
从yml文件中删除块awk '$1 == "tool:"{t=1}
t==1 && $1 == "ports:"{t++; next}
t==2 && /:[[:blank:]]*$/{t=0}
t != 2' file.yml
以下yml,
tool:
image: tool.xxx.com/platform/app:dev
log_driver: syslog
restart: always
ports:
- "54325:80"
- "543325:80"
volume:
- "a:b"
tool1:
image: tool1.xxx.com/platform/app:dev
log_driver: syslog
restart: always
ports:
- "54325:80"
- "543325:80"
volume:
- "a:b"
目标是从ports
主块中删除tool
子块。
在尝试https://stackoverflow.com/a/37256824/698072时,来自here的答案似乎完全有效。但它正在从端口删除所有内容,直到我的Ubuntu 14.04中的yml文件结束(在14.04的多个系统中的sh和zsh中都尝试过)。
预期:
tool:
image: tool.xxx.com/platform/app:dev
log_driver: syslog
restart: always
volume:
- "a:b"
tool1:
image: tool1.xxx.com/platform/app:dev
log_driver: syslog
restart: always
ports:
- "54325:80"
- "543325:80"
volume:
- "a:b"
输出:
tool:
image: tool.xxx.com/platform/app:dev
log_driver: syslog
restart: always
对这个特殊情况的任何帮助都会非常棒。
答案 0 :(得分:0)
如果文件是在Windows上创建的,因此具有Windows行结尾(CR-LF),则模式 public Dialog onCreateDialog(Bundle savedInstanceState) {
inflater = getActivity().getLayoutInflater();
v = inflater.inflate(R.layout.call, null);
Button annuleren = (Button) v.findViewById(R.id.annuleren); //here is the problem I assume
annuleren.setOnClickListener(this);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setView(v);
return builder.create();
}
将失败
/:[[:blank:]]*$/
仅匹配制表符和空格。要匹配任何空格字符,包括[[:blank:]]
(回车),请使用\r
。
如果结果是问题,请考虑使用[[:space:]]
或类似方法删除错误的行结尾,因为它们会导致其他实用程序出现其他问题。
答案 1 :(得分:0)
我在之前的awk
命令中做了一些更改,以处理您的yml
有DOS行结尾的可能性。
awk '{sub(/\r$/, "")}
$1 == "tool:"{t=1}
t==1 && $1 == "ports:"{t++; next}
t==2 && /:\s*$/{t=0}
t != 2' file.yml
看起来Ubuntu awk
不支持POSIX类[[:blank:]]
或[[:space:]]
,因此我们需要使用\s
来匹配空格。