如何从包含'('和使用bash的变量)的文件中删除一行

时间:2017-08-07 09:44:29

标签: bash sed

我有一个名为xyz.txt的文件和一个varibale delVar = 123 我需要从xyz.txt中删除一行,其中包含字符串:

一些(文字($ delVar

我尝试了sed和awk的多种组合:

import java.util.Scanner;
public class PascalTriangle
{
    public static void main (String args[]) throws InterruptedException
    {
        Scanner input = new Scanner(System.in); //declare scanner
        int [] x = new int [1000]; //declare array x to fill in the numbers of triangle
        x [0] = 1;
        x [1] = 1;
        x [2] = 1;
        int row = 2;
        int num = 0; //numbers displayed per row
        int a = 2; //to be used for array
        int y; //user input
        System.out.println("Pascal Triangle Solver to the nth row");
        System.out.println("Type how many rows you would like to solve");
        y = input.nextInt();
        System.out.println(+x[0]+"\n" +x[1]+ " " +x[2]);
        while (row != y)
        {
            System.out.println("\n");
            num = 0;
            row++;
            for(num = 0; row > num; row++)
            {
                x [a+1] = x [a-row] + 1; //where the error occurs
                a++;
                num++;
                System.out.println(+x[a]+ " ");
                while (num < row)
                {
                    x[a] = x [a - row] + x [a - row + 1];
                    System.out.println(+x[a]+ " ");
                    a++;
                    num++;
                }
                x [a+1] = x [a - row];
                a++;
                num++;
                System.out.println(+x[a]);
            }
        }
    }
}

不能工作。

sed -i "/Some\\\(text\\\($delVar/d" xyz.txt

也不起作用。

当我试图绕过&#39;(&#39;使用单\,错误&#34;无法匹配(或(&#34;出现。

我正在使用cygwin来运行它。

我的.sh文件:

sed -i '/Some\\(text\\('"$delVar"'/d' xyz.txt

我的命令:

accountId=$1
Number=$2
temp="Example"

grep $temp History.txt > $Number-History.txt
sed -i '/VALUES (CAST('"$accountId"'/d' $Number-History.txt
sed -i '/, CAST('"$accountId"' /!d' $Number-History.txt
sed -i 's/History.txt:/ /' $Number-History.txt
HistCount=$(wc -l < "$Number-History.txt")
echo $HistCount

在这里,当我在accountId中保存123并尝试在我的模式中设置它时,它匹配模式的数字1234,1123等

1 个答案:

答案 0 :(得分:0)

如Sundeep在评论中所述,您无需转义(,因为默认情况下,sed使用基本的正则表达式(其中(+而其他人不需要被转义以匹配文字(+等。)

但你确实需要转义$,因为$匹配模式空间的结尾。

sed -i "/Some(text(\$delVar/d" xyz.txt

应该有用。

如果要使用扩展的正则表达式,请使用-r标志。

sed -ir "/Some\(text\(\$delVar/d" xyz.txt

现在您需要转义(以及$ s。