Regex 查找并更换受限于特定柱(一个衬里)的部件
是否有一种方法(在一行中)将find和replace限制在以制表符分隔的.txt文件的特定列中 例如:Regex 查找并更换受限于特定柱(一个衬里)的部件,regex,string,perl,Regex,String,Perl,是否有一种方法(在一行中)将find和replace限制在以制表符分隔的.txt文件的特定列中 例如: perl -pe 's/A/B/g;' 但它仅在第2列中查找“A”并将其替换为“B”,并忽略A的所有其他实例,将其转换为: 1 A A2 2 A A 3 B B1 4 A B 5 A A 6 B A3 7 A A 8 C A 9 E B 10 D B 11 A C6 12 A G 13 B L 1
perl -pe 's/A/B/g;'
但它仅在第2列中查找“A”并将其替换为“B”,并忽略A的所有其他实例,将其转换为:
1 A A2
2 A A
3 B B1
4 A B
5 A A
6 B A3
7 A A
8 C A
9 E B
10 D B
11 A C6
12 A G
13 B L
14 A E
15 B A
16 A A
进入:
类似的内容将转换制表符分隔行的第二个字段
perl -lne '@row = split /\t/; $row[1] =~ s/A/B/; print join ( "\t", @row );'
类似的内容将转换制表符分隔行的第二个字段
perl -lne '@row = split /\t/; $row[1] =~ s/A/B/; print join ( "\t", @row );'
你可以这样写:
perl -lane '$F[1]=~tr/A/B/;print join("\t", @F)' file
你可以这样写:
perl -lane '$F[1]=~tr/A/B/;print join("\t", @F)' file
一艘轮船
解释:
# Copy pattern space to hold space
h
# Remove first and third column from pattern space
s/^.*\t\(.*\)\t.*$/\1/
# Transliterate A to B (can use s/// for more complex substitutions)
y/A/B/
# Append hold space to pattern space
G
# Replace second column with transliterated value
s/\(.*\)\n\(.*\t\).*\(\t.*\)/\2\1\3/
自由选择
$粘贴一个sed单行程序
解释:
# Copy pattern space to hold space
h
# Remove first and third column from pattern space
s/^.*\t\(.*\)\t.*$/\1/
# Transliterate A to B (can use s/// for more complex substitutions)
y/A/B/
# Append hold space to pattern space
G
# Replace second column with transliterated value
s/\(.*\)\n\(.*\t\).*\(\t.*\)/\2\1\3/
自由选择
$paste几乎可以肯定。不过,样本数据将大有帮助。几乎可以肯定。不过,示例数据会有很大帮助。这是返回的替换未在-e第1行终止。
这是什么原因?缺少/
。EditedIt现在运行时没有错误,但只作用于.txt文件的第一行,或者至少只替换它在第2列中找到的第一个“A”。很抱歉,隐藏字符导致的.txt文件问题。现在它可以工作了。你可以通过使用-a
标志:perl-anE'$F[1]=~s/a/B/;在.txt中说join“\t”、@F”。在此搜索,返回的是替换未终止于-e行1。
是什么原因导致的?缺少/
。EditedIt现在运行时没有错误,但只作用于.txt文件的第一行,或者至少只替换它在第2列中找到的第一个“A”。很抱歉,隐藏字符导致的.txt文件问题。现在它可以工作了。你可以通过使用-a
标志:perl-anE'$F[1]=~s/a/B/;在.txt中说join“\t”、@F”。在中搜索它