gpt4 book ai didi

linux - 在shell中获取多次出现的文本

转载 作者:太空宇宙 更新时间:2023-11-04 12:46:02 25 4
gpt4 key购买 nike

我有一个这样的文件:

标题-1

美国广播公司

定义

结束

标题-2

uvw

xyz

结束

现在,我希望每次出现时 HEADING- 和 END 之间的所有文本。我怎样才能做到这一点?我尝试使用 grep 和 sed 但它只出现一次。我希望每个 HEADING- 和 END 事件的输出都在单独的文件中

最佳答案

有很多方法可以解决这个问题。如果您只想将每个 HEADING*END 之间的文本行分隔到单独的文件中,(例如 file_000.txt、file_001.txt、... 您可以简单地使用 while 循环并使用 expr 检查每一行的内容,然后跳过、增加文件计数或将该行写入当前filecnt 编号的文件。例如:

#!/bin/sh

fn="${1:-/dev/stdin}" ## input filename (or stdin, default)

[ -r "$1" ] || { ## check that file is readable
printf "error: file not readable '%s'\n" "$fn"
exit 1
}

declare -i filecnt=0 ## counter for file number

while IFS= read -r line; do ## read each line
if [ $(expr "$line" : "HEADING.*") -gt 0 ] ## skip if HEADING*
then
continue
elif [ $(expr "$line" : "END.*") -gt 0 ] ## skip + inc filecnt on END
then
((filecnt++))
continue
elif [ $(expr length "$line") -gt 0 ] ## test non-blank line
then
printf -v ofn "file_%03d.txt" "$filecnt" ## set output file name
printf "$line\n" >> "$ofn" ## write line to file name
fi
done <"$fn"

输入文件

$ cat dat/he.txt
HEADING-1

abc

def

ghi

END

HEADING-2

uvw

xyz

END

示例使用/输出文件

$ sh hdg2end.sh dat/he.txt

$ cat file_000.txt
abc
def
ghi

$ cat file_001.txt
uvw
xyz

检查一下,如果您有任何问题,请告诉我。 (注意:根据您的 read 版本,您可能有也可能没有 -r 选项——如果没有,则忽略它)

关于linux - 在shell中获取多次出现的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38712101/

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