将文本修改为文件

时间:2016-07-07 16:12:10

标签: bash awk sed grep

我正在尝试修改我的脚本。

create table T1
a,
b)
/
INSERT...
/
UPDATE ...   
/
create table T2
a,
b)
/

我想修改文件,如:

create table T1
a,
b) TABLESPACE TS
/
INSERT...
/
UPDATE ...   
/
create table T2
a,
b) TABLESPACE TS
/

所以我想在"创建表"之间获取文本。和" /"并添加该单词" TABLESPACE TS"在" /"之上。 有人可以帮助我在这里使用sed命令可以使用哪些选项?

3 个答案:

答案 0 :(得分:0)

<强>输入

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/your_image"
    android:orientation="vertical">
    <ScrollView
        android:id="@+id/scrollView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        ...">
            Your ScrollView content
    </ScrollView>
</LinearLayout>

<强>脚本

create table T1
a,
b)
/
create table T2
a,
b)
/
Some Stuff
b)
/
b) again

<强>输出

sed '/^create table/{:l1;n;/^\/$/!{s/^b)$/b) TABLESPACE TS/g;b l1}}' file

这里发生了什么?

  • 我们在这里使用了create table T1 a, b) TABLESPACE TS / create table T2 a, b) TABLESPACE TS / Some Stuff b) / b) again 流编辑器。
  • sed s选项意味着替换。
  • sed格式为s,其中s/pattern/replacement/g标志用于全局替换。
  • g用于指定标签:l1
  • l1在打印当前空格后为模式空间添加下一行。
  • n用于否定一组命令。在我们的例子中,它表示模式!{group}是否匹配不会尝试/命令。
  • {group}用于无条件跳转到标签。因此b跳转到标签b l1
  • 现在根据这些要点阅读答案。

注意

l1本身已扩展为流编辑器。有关详情,请查看[ this ]

答案 1 :(得分:0)

使用/作为记录分隔符。

awk -v RS=/ -v ORS=/ -v IGNORECASE=1 '
    /create table/ { print $0, "TABLESPACE TS\n";next } 
    $0 != "\n" 
    END {printf("\n")}'  inputfile > outputfile

答案 2 :(得分:0)

与GAWK

    awk 'BEGIN{RS="\n/"} {printf "%s",$0} /create/{printf "%s"," TABLESPACE TS"} {printf "%s",RS}' file

输出

create table T1
a,
b) TABLESPACE TS
/
INSERT...
/
UPDATE ...
/
create table T2
a,
b) TABLESPACE TS
/
 BEGIN{RS="\n/"} #set RS 
    {printf "%s",$0}  # print record
    /create/{printf "%s"," TABLESPACE TS"} #append if create is present in record
    {printf "%s",RS} # append seperator