sed - 一种将模式之前的每一行的开头附加到每一行的末尾的方法?
问题描述
我正在尝试将某个字符之前的文本文件中每一行的开头复制到同一行的末尾。
我尝试将每一行复制到自身的末尾,然后删除字符之后的所有内容,但问题是我无法弄清楚如何跳过字符的第一个实例,所以结果是重复的文本以及字符第一个实例之外的所有内容都被删除。
我试过像
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
被复制到行尾。
解决方案
您可以使用
sed 's/\([^S]*\)S.*/& \1/' file
查看在线演示
细节
\([^S]*\)
- 捕获组 1 (\1
):除此之外的任何 0+ 个字符S
S.*
-S
和字符串的其余部分(实际上是行,因为sed
默认情况下逐行处理)。
替换是整个匹配 ( &
)、空格和第 1 组值的串联。
推荐阅读
- go - ERR 未知命令`publish` Miniredis Golang
- elixir - Elixir 更改目录并运行 shell 脚本
- r - 如何在计算 R 中的另一列时计算总数和百分比?
- python - 基于 Python 中 fetchall 结果的 MySQL 更新或插入
- c# - C#中抛出异常后如何继续执行代码?
- django - Django - IIS 部署 - 找不到 scriptProcessor
- python-3.x - Spacy 3.0 训练自定义 NER --> 验证此自定义 NER 模型
- java - java.lang.ClassCastException:类 java.lang.String 无法转换为 MidTermProject 类
- sql - 引用同一张表的多对多关系
- node.js - 无法获取 req.files。React-native - Node js (multer)