如何在Linux bash提示符下拆分模式上的字符串,并返回模式的最后一个示例以及[close]之后的所有内容

2hh7jdfx  于 2023-05-22  发布在  Linux
关注(0)|答案(3)|浏览(136)

已关闭,此问题需要details or clarity。目前不接受答复。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。

昨天关门了。
Improve this question
这是我在StackOverflow上的第一个问题,我希望这对这个论坛来说不是太菜鸟。
提前感谢您的帮助!!!

[问题]

我在bash脚本中有一个Linux bash变量,内容如下:
[分裂]
这是测试1
[分裂]
这是一个测试2
[分裂]
这是一个测试3
这是一个测试4
这是测试5
如何在字符串“***[split]***”上拆分此文件并返回拆分后的最后一节?
这是一个测试3
这是一个测试4
这是测试5
最后一节的长度可以变化,但它总是在“字符串”/“文件”的末尾

bt1cpqcv

bt1cpqcv1#

使用awk,将记录分隔符设置为表示拆分字符串的正则表达式,在END处打印最后一条记录。

gawk 'BEGIN{ RS="[[]split[]]" } END{ print $0 }' tmp/test.txt

假设输入来自文件的结果:

this is a test 3
this is a test 4
this is a test 5
vyswwuz2

vyswwuz22#

这个怎么样?:)

FILE="test.txt"
NEW_FILE="test_result.txt"
SPLIT="split"

while read line
do
if [[ $line == $SPLIT ]]
then
    $(rm ${NEW_FILE})
else
    $(echo -e "${line}" >> ${NEW_FILE})
fi

done < $FILE
b1uwtaje

b1uwtaje3#

#!/bin/bash

s="[split]
this is a test 1
[split]
this is a test 2
[split]
this is a test 3
this is a test 4
this is a test 5"

a=()
i=0
while read -r line
do
  a[i]="${a[i]}${line}"$'\n'
  if [ "$line" == "[split]" ]
  then
     let ++i
  fi
done <<< "$s"

echo ${a[-1]}

我只是把字符串中的每一行读到一个数组中,当我遇到**[split]**时,我递增数组索引。最后,我回显最后一个元素。

编辑:如果你只需要最后一部分,也不需要数组。你可以这样做

while read -r line
do
  a+="${line}"$'\n'
  if [ "$line" == "[split]" ]
  then
     a=""
  fi
done <<< "$s"

echo $a

相关问题