需要 shell 脚本来解决以下问题
elecj_test: |1009676|F|269.13348200|3|348415|237.06|0.00|0.00|||SSPPPSSSPSSS|UNTESTED||
如果一行开头为电子测试:并以||它需要替换为| |
这里中间加了空格| |
如果找到则位于该行的中间||它不能替换,只能在行尾替换。
答案1
和awk,使用管道作为字段分隔符:
- 测试第一个字段是否等于“elecj_test:”,最后一个字段为空,最后第二个字段为空。
- 如果为 true,则将倒数第二个字段设置为空格。
awk '
BEGIN { FS = OFS = "|" }
$1 == "elecj_test: " && $NF == "" && $(NF - 1) == "" {
$(NF - 1) = " "
print
}
' file
elecj_test: |1009676|F|269.13348200|3|348415|237.06|0.00|0.00|||SSPPPSSSPSSS|UNTESTED| |
答案2
||
这是我的 sed 命令,它根据要求编辑结尾:
sed -n 's/^\(elecj_test:.*|\)|$/\1 |/p'
匹配以“elecj_test:”开头并以“||”结尾的行,捕获直到(但不包括)最后一个“|”的行带括号,并替换为捕获的字符串,后跟空格和“|”,并打印编辑的行。
它没有参数化以适应不同的开始/结束字符串,因此可能不是高质量的答案,但也许您需要一个快速的一次性命令。