gpt4 book ai didi

linux - SED 命令无法正常运行

转载 作者:太空狗 更新时间:2023-10-29 11:35:10 25 4
gpt4 key购买 nike

我有一个包含以下几行的文件 test.file。

abc01.hostname.com
xyzabc01.hostname.com
xyzabc02.hostname.com

我有脚本 - sed 应该打印输出如下

[abc]
abc01.hostname.com
[xyzabc]
xyzabc01.hostname.com
xyzabc02.hostname.com

但我的输出低于输出。

[abc]
abc01.hostname.com
[abc]
[xyzabc]
xyzabc01.hostname.com
xyzabc02.hostname.com

不知道为什么 [abc] 会重复。有什么建议么?下面是我正在使用的脚本。

#!/bin/bash
for i in `test.file | cut -d. -f1 | sed 's/[0-9]//g' | uniq`
do
{
name=$(cat test.file | grep ^$i[0-9] | head -1)
sed -i "/$name/i \[$i\]" test.file
}
done

最佳答案

让我们稍微清理一下。

for i in `cat test.file | cut -d. -f1 | sed 's/[0-9]//g' | uniq`

不要这样做。不要使用子 shell 为 for 提供列表,不要使用 cat 来提供可以直接读取文件的程序,当不需要子流程...

name=$(cat test.file | grep ^$i[0-9] | head -1)

如果您使用的是 bash,则无需在每次迭代中运行三个(技术上是四个?)子进程来获取此编辑后的字符串。比较this page .

#!/bin/bash
last=''
while read name
do label="${name%%[.0-9]*}"
if [[ "$label" != "$last" ]]
then echo "[$label]" # or printf "\n$label\n" for a separator line
last="$label"
fi
echo "$name"
done < test.file > file.redux

输出:

[abc]
abc01.hostname.com
[xyzabc]
xyzabc01.hostname.com
xyzabc02.hostname.com

如果您对结果满意,

mv file.redux test.file

所有这些都在 bash 中快速有效地处理,除非结果良好,否则不会产生。

如果您认为这将是大量数据,请使用相同的逻辑尝试 awk。 :)

关于linux - SED 命令无法正常运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56003740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com