我试图将文本文件中每行的开头复制到某个字符之前的某个字符到同一行的末尾。
我尝试将每一行复制到其末尾,然后删除该字符之后的所有内容,但是麻烦的是我无法弄清楚如何跳过该字符的第一个实例,因此结果是删除重复的文本以及该字符的第一个实例以外的所有内容。
我尝试过
sed '/S/ s/$/ append text/' sample.txt > cleaned.txt
但这只会添加固定的文本。我也尝试使用:
s/\(.*\)/\1 \1/
复制该行,然后删除S
之后的所有内容,但我不知道如何将其转到第三个S
而不是第一个开始删除的地方。>
我必须从什么开始:
dog 50_50_S5_Scale
cat 10_RV_S76_Scale
mouse 15_SQ_S81_Scale
我想要得到的东西:
dog 50_50_S5_Scale dog 50_50_
cat 10_RV_17_S76_Scale cat 10_RV_17_
mouse 15_EQ_S81_Scale mouse 15_EQ_
将第一个S
之前的所有内容复制到该行的末尾。
答案 0 :(得分:1)
您可以使用
sed 's/\([^S]*\)S.*/& \1/' file
请参见online demo
详细信息
\([^S]*\)
-捕获组1(\1
):除S
以外的任何0+个字符S.*
-S
和字符串的其余部分(实际上是行,因为sed
默认情况下是逐行处理的。)替换是整个匹配项(&
),空格和第1组值的串联。
答案 1 :(得分:0)
您可以尝试:
awk '{print $0 " " substr($0, 0, index($0,"S") - 1)}' file
我们从第一个字符开始直到但不包括“ S”的第一个出现的子字符串。