sed 相关问题

Sed(Stream EDitor)是POSIX环境的命令行编辑器。 Sed根据编辑脚本处理一个或多个文件,并将结果写入标准输出。它创建于贝尔实验室,自70年代中期以来一直存在。

了解 makefile 中的 sed 函数调用

我在软件中遇到了以下makefile: CFLAGS = -O6 -g -Wall CC = 海湾合作委员会 VPATH = ./代码 LIB_MOD = 通用算术输入输出日志 valid_MOD = 有效 $(LIB_MOD) xporta_MOD = porta four_mot

回答 1 投票 0

Bash,删除空 XML 标签

我需要使用 bash 工具来解决几个问题 我想从文件中删除空的 xml 标签,例如: 已经 我需要使用 bash 工具来解决几个问题 我想从文件中删除空的 xml 标签,例如: <CreateOfficeCode> <OperatorId>ve</OperatorId> <OfficeCode>1234</OfficeCode> <CountryCodeLength>0</CountryCodeLength> <AreaCodeLength>3</AreaCodeLength> <Attributes></Attributes> <ChargeArea></ChargeArea> </CreateOfficeCode> 成为: <CreateOfficeCode> <OperatorId>ve</OperatorId> <OfficeCode>1234</OfficeCode> <CountryCodeLength>0</CountryCodeLength> <AreaCodeLength>3</AreaCodeLength> </CreateOfficeCode> 为此我已经通过此命令完成了 sed -i '/><\//d' file 这并不那么严格,它更像是一个技巧,更合适的方法是找到<pattern></pattern>并将其删除。建议? 二、如何前往: <CreateOfficeGroup> <CreateOfficeName>John</CreateOfficeName> <CreateOfficeCode> </CreateOfficeCode> </CreateOfficeGroup> 至: <CreateOfficeGroup> <CreateOfficeName>John</CreateOfficeName> </CreateOfficeGroup> 整体而言?来自: <CreateOfficeGroup> <CreateOfficeName>John</CreateOfficeName> <CreateOfficeCode> <OperatorId>ve</OperatorId> <OfficeCode>1234</OfficeCode> <CountryCodeLength>0</CountryCodeLength> <AreaCodeLength>3</AreaCodeLength> <Attributes></Attributes> <ChargeArea></ChargeArea> </CreateOfficeCode> <CreateOfficeSize> <Chairs></Chairs> <Tables></Tables> </CreateOfficeSize> </CreateOfficeGroup> 至: <CreateOfficeGroup> <CreateOfficeName>John</CreateOfficeName> <CreateOfficeCode> <OperatorId>ve</OperatorId> <OfficeCode>1234</OfficeCode> <CountryCodeLength>0</CountryCodeLength> <AreaCodeLength>3</AreaCodeLength> </CreateOfficeCode> </CreateOfficeGroup> 您能以个人身份回答问题吗?非常感谢! XMLStarlet 是一个命令行 XML 处理器。使用它执行您想要的操作是一项单行操作(直到添加所需的递归行为),并且适用于描述相同输入的 XML 语法的所有变体: 简单版: xmlstarlet ed \ -d '//*[not(./*) and (not(./text()) or normalize-space(./text())="")]' \ input.xml 精美版本: strip_recursively() { local doc last_doc IFS= read -r -d '' doc while :; do last_doc=$doc doc=$(xmlstarlet ed \ -d '//*[not(./*) and (not(./text()) or normalize-space(./text())="")]' \ /dev/stdin <<<"$last_doc") if [[ $doc = "$last_doc" ]]; then printf '%s\n' "$doc" return fi done } strip_recursively <input.xml 使用 /dev/stdin 而不是 -(以平台可移植性为代价),以便在 XMLStarlet 版本之间实现更好的可移植性;调整口味。 对于仅安装较旧依赖项的系统,更有可能安装与 Python 捆绑在一起的 XML 解析器。 #!/usr/bin/env python import xml.etree.ElementTree as etree import sys doc = etree.parse(sys.stdin) def prune(parent): ever_changed = False while True: changed = False for el in parent.getchildren(): if len(el.getchildren()) == 0: if ((el.text is None or el.text.strip() == '') and (el.tail is None or el.tail.strip() == '')): parent.remove(el) changed = True else: changed = changed or prune(el) ever_changed = changed or ever_changed if changed is False: return ever_changed prune(doc.getroot()) print etree.tostring(doc.getroot()) sed '#n 1h;1!H $ { x :remtag s#\(\n* *\)*<\([^>]*>\)\( *\n*\)*</\2##g t remtag p }' YourFile (GNU sed 上的 posix 版本所以 --posix) 递归地将空标签从下一级到上一级删除,直到不再出现空标签。 不是 XML 解析器,因此类似 <tag1 prop="<tag2></tag2>"> ... 的内容也会删除 prop 内容以及 xml 允许的任何其他内容。 您可以使用 sed 执行以下操作: sed -i ':a;N;$!ba;s/<\([^>]*\)>[ \t\n]*<\/\1>//g;s/\([\n][\t\n ]*[\n]\)/\n/g;' yourfile.xml 开头的脚本 (:l;N;$!bl) 通过循环将所有行一起附加到模式空间(:a - 声明标签 a;N - 将下一行附加到模式空间;$!bl - 分支到 if last未到达线) 第一个替换的模式是像开始标签 (<\([^>]*\)>) - 可选空格 ([ \t\n]*) - 结束标签 (<\/\1>) 一样构建的。请注意标签名称模式周围的转义括号,其内容可以在表达式中稍后引用。这就是结束标签与开始标签的匹配方式。 最后,第二次替换 (s/[\n][\n]*/\n/g) 只是删除连续的换行符。

回答 3 投票 0

如何修改栏目时间格式

我有几个文件的一列中包含日期时间,我正在尝试将时间从“%hh.%nn.%ss”更改为“%hh:%nn:%ss”。 困难在于 TIME 列的位置会根据...而变化

回答 1 投票 0

sed:如何打印匹配行之后的所有行?

我使用 sed 后得到了我的研究结果: zcat 文件* | sed -e 's/.*text=\(.*\)status=[^/]*/ /' |切-f 1 - | grep“模式” 但它只显示了我剪掉的部分。我怎样才能打印后面的所有行...

回答 6 投票 0

将每行最后一个数字与字母分开

我有一个包含临时 SNP ID 和等位基因的长文件,如下所示: 14_611646T,C 14_881226CT,C 14_861416.1GGC,GGCGCGCGCG 我想将每行的最后一个数字与

回答 3 投票 0

将数字与字母分开

我有一个包含临时 SNP ID 和等位基因的长文件,如下所示: 14_611646T,C 14_881226CT,C 14_861416.1GGC,GGCGCGCGCG 我想将每行的最后一个数字与

回答 1 投票 0

我正在尝试使用 grep sed 或 awk 来解析文件的单独行的字符之间[重复]

尝试在本示例文本中解析 behen 和 > 的下一个实例: >S_behen_BOx6592|contig_6484&contig_7580 TCCGAACCATAGCAAACATCGAAAGGAGTTTCGAAGGAAGTTTCCTGAGATGTTATAAAAG

回答 1 投票 0

如何使用 .json 文件的 sed 命令将版本号的最后一位替换为前面的数字

我有一个 package.json 文件,其中包含版本行号: “版本”:“3.2.47”, 我想用 sed 更改版本号,以便版本号的最后一部分...

回答 1 投票 0

sed:多行条件合并

我需要根据模式使用 sed 合并文件行。例如: 输入文件: X1 A B C D E F \+ G H I J 1 \+ LK TPP E OO 2 X2 DDF F Y \+ J W Q .... 预期输出: X1 A B C D E F G H I J 1...

回答 3 投票 0

确定并更改 sed 列

我有一个包含 3 列的文件,用逗号分隔并用方括号括起来......: 我想将所有行中以“e-3*”结尾的条目更改为“0”。 [6.90253292068385...

sed
回答 2 投票 0

解析 df -k 输出以获取利用率详细信息

引发这个问题的具体问题是,我正在编写一个 bash 脚本来使用 df -k 检查磁盘利用率,并希望脚本在利用率超过阈值时执行某些操作,例如 90...

回答 2 投票 0

命令 sed 上下文寻址未按预期工作

我有一个文本文件file.txt,其内容为: 主 蓝色的 鸟 天空 爬虫 洛伍德 木头 我正在尝试使用命令 sed 和 Basic

回答 1 投票 0

使用 sed 解释为固定字符串/文字而不是正则表达式

对于 grep 有一个固定字符串选项 -F (fgrep) 来关闭搜索字符串的正则表达式解释。 sed 有类似的工具吗?我在这个人身上找不到任何东西。推荐一下...

回答 7 投票 0

我尝试使用 grep sed 或 awk 来解析文件的单独行的字符之间

尝试在本示例文本中解析 behen 和 > 的下一个实例: >S_behen_BOx6592|contig_6484&contig_7580 TCCGAACCATAGCAAACATCGAAAGGAGTTTCGAAGGAAGTTTCCTGAGATGTTATAAAAG

回答 1 投票 0

MacOS 上的 sed“未定义标签”

我最近发现这个简单的 sed 表达式在 Linux 或 Cygwin 下工作正常,但在 Mac 上失败并出现“未定义标签”错误: $ sed '/成功/d ; /\[java\]/!b 标签; s/\s\+\[java\]/...

回答 3 投票 0

使用 sed 移动列

我的 Awk 脚本生成以下输出: 1396.0893854748604 jdbc:mysql 192.168.0.8:3306/ycsb 3 我需要将最后一列放在开头,但不希望与第一列交换其位置。我需要...

回答 1 投票 0

Dockerfile - sed 命令不替换 ARG 变量

我有以下dockerfile 来自 mcr.microsoft.com/dotnet/aspnet:6.0 AS 基础 工作目录/WebAdmin 曝光 80 暴露 443 ARG API_GATEWAY_STAGE_NAME RUN echo“API_GATEWAY_STAGE_NAME 是 $

回答 1 投票 0

分割行并在文件中获取图案

我有很多文件.txt,如下所示: 文件1.txt 标头 1_fff_aaa 1_rrr_aaa 1_ggg_aaa ... 文件2.txt 标头 1_ttt_aaa 1_iii_aaa 1_lll_aaa ... 我想删除标题并拆分条...

回答 1 投票 0

使用列、更改其格式时遇到的问题

我有一个文件,其中包含诸如此类的各种行数。 05阿尔布兹·克劳迪娅·玛丽亚 LBZCDM64M53F205R 236.41 197.01 6.70 我的目标是,通过

回答 1 投票 0

为什么我的 Linux 文本文件(使用 echo 创建)以换行符结尾?我怎样才能删除它? [重复]

我在使用 sed 添加新行时遇到问题。 我想在文本文件的末尾添加一行,我尝试过 回声“你好,你好吗?” >> 我的文件.txt 但问题是它

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.