我有一个看起来像这样的文件:
lbsrv_standards-d
lbsrv_standards-t
lbsrv_standards
所需的输出:
rename lbsrv_standards-d lb_standards-d
rename lbsrv_standards-t lb_standards-t
rename lbsrv_standards lb_standards
因此,我需要打印$ 1,一个空格,然后打印$ 1的修改版本,我一直在使用awk,但是如果不在原始$ 1和修改后的$ 1之间添加换行符,就无法弄清楚替换。
解决方案:
awk '{print "rename "$1} ; { gsub("lbsrv", "lb", $1) ; print }'
输出:
rename lbsrv_standards-d
lb_standards-d
rename lbsrv_standards-t
lb_standards-t
rename lbsrv_standards
lb_standards
任何帮助将不胜感激
谢谢
答案 0 :(得分:1)
第一种解决方案: 。能否请您尝试以下操作。
awk 'BEGIN{FS="_"}{print "rename",$0,"lb_"$2}' Input_file
说明: 现在添加了以上代码的说明。
awk ' ##Starting awk program from here.
BEGIN{ ##Starting BEGIN section here.
FS="_" ##Setting field separator as _ here.
} ##Closing BEGIN section of awk command here.
{
print "rename",$0,"lb_"$2 ##Printing string rename then complete line then lb_ string with 2nd column here as per OP need.
}' Input_file ##Mentioning Input_file name here.
第二个解决方案: :现在添加一个sed
解决方案。
sed 's/\([^_]*\)_\(.*\)/rename \1_\2 lb_\2/' Input_file
输出如下。
rename lbsrv_standards-d lb_standards-d
rename lbsrv_standards-t lb_standards-t
rename lbsrv_standards lb_standards
答案 1 :(得分:0)
您可以使用
awk '{a=$0; sub(/^lbsrv/, "lb", a); print "rename "$0" "a }'
请参见online demo
详细信息
a=$0
-使用整行的值声明一个临时变量sub(/^lbsrv/, "lb", a)
-字符串开头的lbsrv
被lb
print "rename "$0" "a
-打印结果:rename
,空格,整行,空格,然后是a
变量的内容。 使用sed
可以实现更简单的解决方案(尤其是如果字符串是单独输入的话):
sed 's~^lbsrv\(.*\)~& lb\1~' file > newfile
这是一个基于BRE POSIX模式的sed
命令,可以找到
^
-一行的开头lbsrv
-子字符串\(.*\)
-第1组:直到行/输入末尾的0个或更多字符。 & lb\1
是一种替换模式,它首先占据整行,然后附加一个空格lb
,然后附加第1组的内容。
答案 2 :(得分:0)
其他答案也很好,但是您可以看到您需要做的就是使用import Foundation
import UIKit
import MaterialComponents
class SectionHeaderAppointment:UICollectionReusableView {
var sectionHeaderlabel: UILabel!
var nameflatButton:MDCButton!
override init(frame: CGRect) {
super.init(frame: frame)
configure()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func layoutSubviews() {
super.layoutSubviews()
print("Rotation")
sectionHeaderlabel.frame = CGRect(x: 0, y: 0, width: frame.width, height: frame.height)
nameflatButton.frame = CGRect(x: (frame.width - (frame.width/3))/2, y: 6, width: frame.width/3, height: frame.height - 8)
}
}
而不是printf
:
print
当然,通常您可以将命令合并为一个动作:
$ awk '{printf "rename %s ", $1} ; { gsub("lbsrv", "lb", $1) ; print }' file
rename lbsrv_standards-d lb_standards-d
rename lbsrv_standards-t lb_standards-t
rename lbsrv_standards lb_standards
此外,$ awk '{printf "rename %s ", $1; gsub("lbsrv", "lb", $1) ; print }' file
默认在gsub
上运行,并且使用尾随$0
代替1
很流行,所以最后:
print
答案 3 :(得分:0)
如果创建输出意味着实际上要重命名文件,则可以改为:
$ rename lbsrv_ lb_ lbsrv_standards{-d,-t,}
将对指定的三个文件进行前缀重命名(在bash括号扩展之后)。
答案 4 :(得分:0)
这可能对您有用(GNU sed):
sed 's/lbsrv\(.*\)/rename & lb\1/p;d' file
使用模式匹配来识别行中需要复制的部分,并打印成功的匹配项,否则删除该行。
答案 5 :(得分:0)
使用Perl
perl -pe ' s/lb(?:srv)(.*)/rename $& lb$1/g '
使用您给定的输入
$ cat jim.txt
lbsrv_standards-d
lbsrv_standards-t
lbsrv_standards
$ perl -pe ' s/lb(?:srv)(.*)/rename $& lb$1/g ' jim.txt
rename lbsrv_standards-d lb_standards-d
rename lbsrv_standards-t lb_standards-t
rename lbsrv_standards lb_standards
$