computer0-1 computer0-2 computer0-3
computer0-10 computer0-5 computer0-6
computer0-2 computer0-7 computer0-3
这些保存在文本文件中。我想编写一个bash脚本来检查每一行:
如果该行包含computer0-1
,则在行的开头写下另一个computer0-1
。例如:
computer 0-1 computer0-10 computer0-5 computer0-1.
如果该行包含computer0-7
,则在行的开头写下另一个computer0-7
。
如果该行包含computer0-10
,则在行的开头写下另一个computer0-10
。
我尝试使用if和for循环,但我不知道如何编写它们。我很高兴。
我需要编写一个脚本来执行此操作,而且我是Linux中的新手。我怎样才能做到这一点?有没有简单的方法呢?
答案 0 :(得分:2)
使用sed:
sed -e 's/^.*\b\(computer0-1\)\b/\1\t\0/' -e 's/^.*\b\(computer0-10\)\b/\1\t\0/' -e 's/^.*\b\(computer0-7\)\b/\1\t\0/' <file>
它会搜索该行中的computer0-1
,computer0-10
,computer0-7
之一,如果找到,则会在该行的开头放置一份副本,然后是制表符其余部分。
详细说明:
s/<search>/<replace>/ replaces the <search>ed pattern with the <replace> expression
^ matches the start of the line
.* matches everything until the next pattern matches
\b is the word-boundary metacharacter : it matches the start and end of a word of [a-zA-Z_] characters
\(...\) groups a fragment of pattern. We can reference it later.
\1 is a back-reference to the first (and only) group defined earlier
\0 is a back-reference to the whole matched string
所以我们所做的是匹配搜索到的令牌(即computer0-1),同时确保它是一个完整的单词(computer0-1不应该与computer0-12匹配),然后我们重新创建匹配的字符串,将其附加到匹配的标记。
试运行:
$ echo """computer0-1 computer0-2 computer0-3
> computer0-10 computer0-5 computer0-6
> computer0-2 computer0-7 computer0-3""" > input
$ sed -e 's/^.*\b\(computer0-1\)\b/\1\t\0/' -e 's/^.*\b\(computer0-10\)\b/\1\t\0/' -e 's/^.*\b\(computer0-7\)\b/\1\t\0/' input
computer0-1 computer0-1 computer0-2 computer0-3
computer0-10 computer0-10 computer0-5 computer0-6
computer0-7 computer0-2 computer0-7 computer0-3
答案 1 :(得分:1)
canvas.on('mouse:down', function(e){
//check if you clicked on an object that exists canvas
if(e.target != undefined){
if (clicks == 0) {
var pointer=canvas.getPointer(event.e);
console.log(pointer);
x1 = pointer.x;
y1 =pointer.y;
console.log("Pointer Start " +x1 ,y1);
clicks++;
}
else
{
var pointer2=canvas.getPointer();
console.log(pointer2);
var endx=pointer2.x;
var endy=pointer2.y;
console.log("Pointer2 End " +endx ,endy);
console.log("x and y"+x1,y1);
var newwidth=pointer2.x- x1;
var newheight=pointer2.y - y1;
var rect=new fabric.Rect({
left:x1,
top: y1,
originX :'left',
originY :'top',
width:newwidth,
height:newheight,
selectable: true,
evented:false,
fill:'red',
opacity :0.3
});
canvas.add(rect);
canvas.renderAll();
clicks=0;
}
});
fabric.Image.fromURL('fedex.jpg', function (img) {
canvas.add(img.set({
width: 700,
height:350,
left: 350,
top: 175,
selectable: false,
}));
}//end if
});
救援!
awk
请注意,此搜索按字段顺序进行,并且将打印第一个匹配项。如果键的优先级很重要(如果-1和-10在同一行上的匹配总是使用-1),你可以使用这个
$ awk '{for(i=1;i<=NF;i++) if($i~/computer0-(1|10|7)$/) print $i, $0}' file | column -t
computer0-1 computer0-1 computer0-2 computer0-3
computer0-10 computer0-10 computer0-5 computer0-6
computer0-7 computer0-2 computer0-7 computer0-3