Regex 查找并更换受限于特定柱(一个衬里)的部件

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

是否有一种方法(在一行中)将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
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”。在中搜索它