bash - 如何替换 10000 行中的文本
问题描述
我有超过 10000 个这样的文件,我正在尝试将它们作为模板
我的弦是这样的
"MLKT_3C_AAAU_01A"
"MLKT_3C_AALI_01A"
"MLKT_3C_AALJ_01A"
"MLKT_3C_AALK_01A"
"MLKT_4H_AAAK_01A"
我正在尝试将它们转换为此
names(MLKT_3C_AAAU_01A)[2] <- '3C_AAAU_01A' df<- full_join(df,MLKT_CS_4942_01A, by = 'V1')
names(MLKT_3C_AALI_01A)[2] <- '3C_AALI_01A' df<- full_join(df,MLKT_3C_AALI_01A, by = 'V1')
names(MLKT_3C_AALJ_01A)[2] <- '3C_AALJ_01A' df<- full_join(df,MLKT_3C_AALJ_01A, by = 'V1')
names(MLKT_3C_AALK_01A)[2] <- '3C_AALK_01A' df<- full_join(df,MLKT_3C_AALK_01A, by = 'V1')
names(MLKT_4H_AAAK_01A)[2] <- '4H_AAAK_01A' df<- full_join(df,MLKT_4H_AAAK_01A, by = 'V1')
到目前为止,我遇到的最好的方法是使用文本编辑器并一个一个地制作它们。我想知道 bash 中是否有办法获取上述字符串并将其转换为我提供的示例?
在开始之前,我从每一行中删除引号
sed 's/\"//g' example.txt > exampleout.txt
起初我尝试names(
在每行的开头添加。所以让我们想象一下,每行包含所有这些字符串的文件称为 exampleout.txt。这给了我三个时间的名字(而不是一次
awk '$0="names("$0' exampleout.txt > myout.txt
然后我尝试)[2] <- '' df<- full_join(df,, by = 'V1')
使用以下内容粘贴在每行的末尾
sed -e 's/$/)[2] <- '' df<- full_join(df,, by = 'V1') /' myout.txt > myout2.txt
所以它让我想到了这个
names(MLKT_3C_AAAU_01A )[2] <- df<- full_join(df,, by = V1)
names(MLKT_3C_AALI_01A)[2] <- df<- full_join(df,, by = V1)
names(MLKT_3C_AALJ_01A )[2] <- df<- full_join(df,, by = V1)
names(MLKT_3C_AALK_01A)[2] <- df<- full_join(df,, by = V1)
names(MLKT_4H_AAAK_01A)[2] <- df<- full_join(df,, by = V1)
解决方案
您实际上可以在一个命令中完成所有操作。下面的脚本类似于sed
,只是我选择使用perl
非贪婪匹配 ( .*?_(.*)
) 来分隔第一个下划线字段。
perl -pe "s/^\"(.*?_(.*))\"$/names(\1)[2] <- '\2' df <- full_join(df, \1, by 'V1')/" example.txt
在这里,我捕获了两个字符串。
- 双引号内的所有内容,以及
- 第一个下划线之后的所有内容。
例如,在 中"MLKT_3C_AAAU_01A"
,第一次捕获是MLKT_3C_AAAU_01A
,第二次捕获是3C_AAAU_01A
。
之后,进行适当的替换。
如果第一个下划线之前的字段是常量(例如MLKT
),您可以使用sed
,将非贪婪匹配替换为常量。
sed -E "s/^\"(MLKT_(.*))\"$/names(\1)[2] <- '\2' df <- full_join(df, \1, by 'V1')/" test.txt
注意-E
标志的使用(用于扩展的正则表达式/更容易的组捕获)和双引号的使用(用于使用单引号作为替换的一部分)。
推荐阅读
- python - tensorflow-gpu 找不到 GPU
- javascript - Highchart JS设置数据不更新导出:下拉事件上的ShowTable,但图表更新正常
- python - 收到无效输入后,如何阻止程序跳转到不同的 if 语句?
- python - 为什么没有在输出中打印???Python
- firefox - 为什么我今天无法访问 YouTube?PR_END_OF_FILE_ERROR
- python - InterfaceError: 未找到数据源名称并且未指定默认驱动程序 (0) (SQLDriverConnect)
- java - 无法从字节/布尔数组加载,因为“BlackWhite.marked”为空
- kubernetes - 如何清理 pod 不再使用的 kubernetes configMaps
- javascript - 为什么 push() 设置新的排序 AZ?
- macos - mac上所有> 1.2颤振版本的问题