我正在尝试修改我的脚本。
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命令可以使用哪些选项?
答案 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