小编tas*_*ear的帖子

使用bash shell脚本在2个字符串之间提取字符串

我见过类似的问题,但在这种情况下似乎没有一个解决方案可行.我有一个看起来像这样的文本文件

START-OF-FILE
RUNDATE=20140910
FIRMNAME=dl
FILETYPE=pc
REPLYFILENAME=TEST
DERIVED=yes
PROGRAMFLAG=oneshot
SECID=ISIN
SECMASTER=yes
PROGRAMNAME=getdata
START-OF-FIELDS
ISSUER
START-OF-DATA
US345370CN85|0|4|FORD MOTOR COMPANY|FORD MOTOR COMPANY| | |
US31679BAC46|0|4|FIFTH STREET FINANCE COR|FIFTH STREET FINANCE COR| | |
END-OF-DATA
END-OF-FILE
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写一个bash shell脚本,只提取"START-OF-DATA"和"END-OF-DATA"之间的文本,不包括这两者.所以我正在寻找的输出看起来像这样

US345370CN85|0|4|FORD MOTOR COMPANY|FORD MOTOR COMPANY| | |
US31679BAC46|0|4|FIFTH STREET FINANCE COR|FIFTH STREET FINANCE COR| | |
Run Code Online (Sandbox Code Playgroud)

到目前为止我写的代码看起来像这样

while read line
do
    name=$line

    echo $name | sed -e 's/START-OF-DATA\(.*\)END-OF-DATA/\1/'

done < $1
Run Code Online (Sandbox Code Playgroud)

并从bash中运行它

./script.sh file.txt
Run Code Online (Sandbox Code Playgroud)

其中script.sh是我保存的shell脚本,而file.txt是它读取的上面的文本文件.目前它只是读取并回显整个文件.我猜测我的语法中有些愚蠢.任何指向正确方向的人都会非常感激.谢谢

linux string bash shell

5
推荐指数
1
解决办法
4695
查看次数

For循环中的Postgresql更新

我对postgresql很新,我在使用for循环更新表中的空值列时遇到问题.我正在努力的表是巨大的,所以为了简洁,我将给出一个更小的例子,它应该得到重点.请参考下表

+----+----------+----------+
| id  |  A  | B  |  C       |
+----+----------+----------+
| a   | 1   | 0  |  NULL    |
| b   | 1   | 1  |  NULL    |
| c   | 2   | 4  |  NULL    |
| a   | 3   | 2  |  NULL    |
| c   | 2   | 3  |  NULL    |
| d   | 4   | 2  |  NULL    |
+----+----------+----------+
Run Code Online (Sandbox Code Playgroud)

我想编写一个for循环,遍历所有行并对列a和b中的值执行一些操作,然后在c中插入一个新值.例如,在id = a的情况下,更新表集合C = A*B,或者其中id = d设置C = A + B等.这样就会给我一个表格

+----+----------+----------+
| …
Run Code Online (Sandbox Code Playgroud)

postgresql for-loop sql-update

3
推荐指数
1
解决办法
1万
查看次数

使用 sed 有条件替换

我的问题可能相当简单。我正在尝试替换文件中行开头的字符串序列。例如,我想将模式“GN”的任何实例替换为“N”,或将“WR”替换为“R”,但前提是它们是该行的前 2 个字符。例如,如果我有一个包含以下内容的文件:

WRONG
RIGHT
GNOME
Run Code Online (Sandbox Code Playgroud)

我想转换这个文件以给出

RONG
RIGHT
NOME
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用以下内容来替换上述示例的任何实例;

sed -i 's/GN/N/g' file.txt
sed -i 's/WR/R/g' file.txt
Run Code Online (Sandbox Code Playgroud)

问题是我希望仅当上述模式是任何给定行中的前 2 个字符时才会发生这种情况。可能是一个 IF 语句,尽管我不确定条件会是什么样子。任何正确方向的指示将不胜感激,谢谢。

linux bash sed

3
推荐指数
1
解决办法
6876
查看次数

标签 统计

bash ×2

linux ×2

for-loop ×1

postgresql ×1

sed ×1

shell ×1

sql-update ×1

string ×1