O******e 发帖数: 734 | 1 $ cat -T test.dat
abc^Ixyz
$ sed -e 's/\t/TAB/' test.dat
abcTABxyz
$ sed -e 's/\\t/TAB/' test.dat
abc xyz
$ sed -e 's/ /TAB/' test.dat (Ctrl-I used in the regexpr)
abcTABxyz
$ sed -e "s/\t/TAB/" test.dat
abcTABxyz
$ sed -e "s/\\t/TAB/" test.dat
abcTABxyz
$ sed -e "s/ /TAB/" test.dat (Ctrl-I used in the regexpr)
abcTABxyz
In the above examples I can type the TAB character in the shell
either using Ctrl-V followed by TAB or Ctrl-V followed by Ctrl-I. |
|
t*********l 发帖数: 30 | 2 *double space a file
sed G
*under UNIX convert DOS newline (CR/LF) to Unix format:
sed 's/.$//'
sed 's/^M$//' #^M should be input like this: Ctrl-V Ctrl-M
*delete leading whitespaces
sed -e 's/^[ ^t]*//' #^t (table): Ctrl-V Ctrl-I
*delete all CONSECUTIVE blank lines from file except the first
sed '/./,/^$/!d' #this will allows 0 blank at top
#in (t)csh, you may want to use \!
sed '/^$/N;/\n$/D' #allowas 1 blank at top, 0 at EOF
*de |
|
d******e 发帖数: 143 | 3 请教个SED的用法
我有一些LOG文件,每一行的格式是一样的
我要把第5个field作一下运算再附在一起,如下
turn lines like this:
E,1204905442,3006,238,83888208,126586,N,0059221,T,K
into:
E,1204905442,3006,238,83888208[2128],126586,N,0059221,T,K
我感觉应该用这些shell,sed之类的应该挺容易的,可是写出来发现要用sed两次,很郁闷
不知道如何对匹配的部分直接运算一下
for s in $(cat $1)
do
errcode=$(echo $s | sed 's/E,[0-9]*,[0-9]*,[0-9]*,\([0-9]*\),.*/\1/')
errcode=$(($errcode % 65536))
echo $s | sed 's/\(E,[0-9]*,[0-9]*,[0-9]*,\)\([0-9]*\)\(,.*\)/\1\2['$errcode
']\3/'
done
多谢 |
|
h**o 发帖数: 548 | 4 我想comment out 某一行。
suppose the content of a.txt is:
111111111
222222222
33333AAA
444444444
我写到:
pos=`grep -n "AAA" a.txt |cut -d':' -f1`
sed "${pos} d" a.txt >b.txt
sed '
$pos i\
#33333AAA\
' b.txt>a.txt
前两个命令没问题, 最后一个命令得到错误信息:
sed: command garbled: $pos i\
请问错在哪? 其实我用:
sed '
3 i\
#33333AAA\
' b.txt>a.txt
就对了。 可能和variable 有关。 |
|
m*********g 发帖数: 273 | 5 想实现以下功能:
file1:
NP 4
要改成:
NP 5
在终端下:
$ sed '/^NP/s/[0-9]/5/' file1
可以完成。
现在要写一个bash scirpt 批量做这件事
#!/bin/bash
for((n=1;n<=3;n++))
do
sed '/^NP/s/[0-9]/${n}/' file1 > file1.$n
done
这样不成功, file1.1 是这样的
NP ${n}
怎样才能吧$n实际的值传给script中的sed呢?
我知道用perl可以做的,只是想用一下sed这个简单工具,先谢了 |
|
A******a 发帖数: 61 | 6 【 以下文字转载自 Linux 讨论区 】
发信人: Ataraxia (静), 信区: Linux
标 题: how to sed from grep output in c shell?
发信站: BBS 未名空间站 (Fri Jan 25 11:45:51 2008)
by using
foreach i (*.txt)
grep -o 'Modules:[0-9]' $i
end
i got return like
Modules:2
Modules:1
Modules:10
Modules:0
Modules:7
...
I want to cut off "Modules:" and only keep the integer number, how should i
use sed based on this output?
grep ... | sed
or
sed ... $(grep...)
Thanks. |
|
h**o 发帖数: 548 | 7 我想comment out 某一行。
suppose the content of a.txt is:
111111111
222222222
33333AAA
444444444
我写到:
pos=`grep -n "AAA" a.txt |cut -d':' -f1`
sed "${pos} d" a.txt >b.txt
sed '
$pos i\
#33333AAA\
' b.txt>a.txt
前两个命令没问题, 最后一个命令得到错误信息:
sed: command garbled: $pos i\
请问错在哪? 其实我用:
sed '
3 i\
#33333AAA\
' b.txt>a.txt
就对了。 可能和variable 有关。 |
|
w**********o 发帖数: 140 | 8 echo "#aaa" | sed '/^#/! s/aaa/bbb/g'
#aaa
echo "aaa" | sed '/^#/! s/aaa/bbb/g'
bbb
這個trick就是, 先找到, 然後在替換.
sed沒有look ahead和look behind. |
|
A******a 发帖数: 61 | 9 【 以下文字转载自 Linux 讨论区 】
发信人: Ataraxia (静), 信区: Linux
标 题: how to use grep/sed to remove newlines?
发信站: BBS 未名空间站 (Sat Oct 18 10:48:52 2008)
i am trying grep some text from a file then return some words:
grep "^>start" textfile.txt
but it always returns results one each line:
A
B
C
I want to have it as: A B C ..., so I tried to use sed:
grep "^>start" textfile.txt | sed -e 's/\n//'
it doesn't work, anyone knows how to solve this?
Thanks. |
|
l********r 发帖数: 175 | 10 I like to replace ' with * using sed command, how to do it? Thanks a
lot.
sed 's/'/*/g' file > file-new;
could not work.
sed 's/\'/*/g' file > file-new;
could not work either. |
|
s****a 发帖数: 6521 | 11 【 以下文字转载自 Unix 讨论区 】
发信人: shorea (未注册用户), 信区: Unix
标 题: 请教一个sed命令
发信站: BBS 未名空间站 (Wed Dec 14 11:31:41 2011, 美东)
我没用过unix,
现在在服务器上运行一个小脚本出了错误:
$i="2000"
sed -i "s/.0*/$i/" file.txt
错误提示: sed: -e expression #1, char xx: unterminated `s' command
而同样的命令,我在自己的Linux下可以执行没有问题。
请问这是为什么,怎样解决呢?
谢谢! |
|
n********n 发帖数: 529 | 12 呵呵,这个问题,我每半年就会在这个板上回答一次。
有些系统的 sed 不能直接用 "\n"。你可以这样写。
echo "Your String Here!" | sed 's/{pattern}/\
/'
或者,
echo "Your String Here!" | sed 's/\
/{pattern}/' |
|
n********n 发帖数: 529 | 13 恩,确实没看清你说的是csh.
csh用这个吧,
sed -e ':a' -e 'N' -e '$\!ba' -e 's/\n/ /g' <--- 用在命令行
或者,
sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ /g' <--- 用在脚本里
% cat a
abc
cde
efg
fff
rrr
fff
ggg
hhh
jj
j
kkk
% sed -e ':a' -e 'N' -e '$\!ba' -e 's/\n/ /g' a
abc cde efg fff rrr fff ggg hhh jj j kkk |
|
i***r 发帖数: 1035 | 14 一个column,想把回车替换为空格不成功:
awk '{print $2}' file | sed -e 's/\n/ /g'
但是tr就可以做到:
awk '{print $2}' file | tr '\n' ' '
更奇怪的是,如果是一行里面有空格,sed可以替换为回车
head -1 file | sed -e 's/ /\n/g' |
|
b***y 发帖数: 2799 | 15 ☆─────────────────────────────────────☆
nkw (just+it) 于 (Sat Apr 5 20:21:14 2008) 提到:
不知道雷在这里用的对不对,虽然我很不喜欢这个用法。
要parse很多大text csv文件,很简单,每行50列,其中用一列是没有双引号的text,
但有时也会有逗号,目的就是如果一行的逗号多了一个的话(肯定是text列有逗号),
就用双引号把一列括起来。
有同事用perl写了一个parser。我一直很抗拒perl,混乱,很丑。而且这个问题用sed
就可以做了。
在cygwin用sed做了,用了40多分钟。
觉得太慢。想想awk会不会快点?结果还慢一倍。
perl一直被认为是做这个最好的,那个同事还说过perl就是“designed for this”。
发现同事run过他的perl,去看了他saved的parsed文件时间,显示用了6,7+小时。他
用native Active perl,非cygwin。
再试了试gnu sed for windows 32,半个小时。http://gnuwin32.so |
|
b***y 发帖数: 2799 | 16 ☆─────────────────────────────────────☆
nkw (非死非活) 于 (Sat Jul 19 03:08:26 2008) 提到:
今天浪费很多时间在一个很简单的regex上,原来是grep没有\t (tab).有没有什么
option让这些程序使用一个统一的regex?对不常用的人要记住这些细微差别不容易。
还遇到一怪事,我的数据是三个字段以tab分割的结构,第三个日期字段很多为空字段。
xxxx{tab}yyyy{tab}12/31/2007
xxxx{tab}yyyy{tab}
xxxx{tab}yyyy{tab}11/30/2007
xxxx{tab}yyyy{tab}
当时我不知道grep的tab输入时不得不先用sed把\t换成|。
sed 's/\t/|/g' file|grep "[^|]*|[^|]*|.+" 得不到任何结果。
sed 's/\t/|/g' file|grep "[^|]*|[^|]*|[0-9]+" 就能有输出。
前一个有什么问题?
☆──────────────────────────────────── |
|
q****h 发帖数: 1 | 17 Hi, there:
I'm stuck with a sed question. Could you help me out?
Here is the content of the text file: test.c
line1
line2
text3asdasfasfasftext4
I want to change it to the following format:
line1
line2
text3asdasf
asfasftext4
I try this sed command but it doesn't work:
sed s/\\n\ test.c > test
Thanks in advance! Any suggestion is appreciated. |
|
e*******t 发帖数: 59 | 18 一个包裹,大概总额8000. 当时declaration就是填的8000。 走的是ups。今天联系我
让我填 SED,我看了一下:
The SED is a U.S. government form used for developing export statistics and
controls. It is required for shipping single commodities valued
at more than $2,500 or commodities requiring a license or license exemption.
请教各位过来人,这个怎么抹平了。。。
谢谢 |
|
q**d 发帖数: 16 | 19 you should have known yourself - use partial quoting ("..." as in 1st sed
command)
BTW why not use
sed "s/^\(.*)AAA/#\1AAA/" file |
|
b*****d 发帖数: 24 | 20 我有很多个(几百个)文本文件file1,file2,...filem,每个文件中都有100个这样的
字符串,'step n',n是一个占用8个字符的整数,具体数值不确定,该字符串在所在行
的开头。
我现在需要做这样处理,把文件filem中的每个'step n' 字符串的数字n都替换为数字n
+m*100。我想写shell script来完成,不知道怎么实现,请高手指教。我试了:
sed 's/^step\(.\{8\}\)/step$(\1+500)'
但是不起作用。关键是我只不知道怎么把\1得到的字符串转化为整数,在做计算,不知
道sed有没有这样的功能。
Thx! |
|
d*o 发帖数: 108 | 21 我知道
$yyy = anything;
$replace = “sed `s/XXX/$yyy/g` file1 > file2;
但在下面的 “.” 甚摸意思呢? (结果是一样的. Code written by someone else)
$yyy = anything;
$replace = “sed `”.”s/XXX/”.$yyy.”/g` file1 > file2; |
|
c**t 发帖数: 2744 | 22 +
我知道
$yyy = anything;
$replace = “sed `s/XXX/$yyy/g` file1 > file2;
但在下面的 “.” 甚摸意思呢? (结果是一样的. Code written by someone else)
$yyy = anything;
$replace = “sed `”.”s/XXX/”.$yyy.”/g` file1 > file2; |
|
j**********p 发帖数: 22 | 23 grep -o 'Modules:[0-9]' $i | sed 's/Modules://g'
or
grep -o 'Modules:[0-9]' $i | awk -F ":" '{print $2}'
or
grep -o 'Modules:[0-9]' $i |sed 's/^.*://g' |
|
i***f 发帖数: 10 | 24 Hi,
Today when I try to replace a string in many files, first
I tried to use "sed -e s/STRING1/STRING2/g *" and only found
out the replaced pattern was output to STDOUT. At last I have
to write a script like this:
#/bin/sh
for fn in *
do {
sed -e s/STRING1/STRING2/g $fn > out.tmp
cp -f out.tmp $fn
}
done
rm -f out.tmp
Anyone can suggest to do the same function by using only one
line? |
|
i****d 发帖数: 7 | 25 【 以下文字转载自 Linux 讨论区 】
【 原文由 Iamold 所发表 】
file1.txt contains
asdfasdf
adsf
asdfasdfsdf
#ifdef CONFIG_SCSI_MULTI_LUN
static int max_scsi_luns = 32;
#else
static int max_scsi_luns = 1;
#endif
I want to replace lines from CONFIG_SCSI_MULTI_LUN to #endif
how to do this by using sed?
the following command yielded a wrong output...
sed '/CONFIG_SCSI_MULTI_LUN/,/endif/{c\
#ifdef CONFIG_SCSI_MULTI_LUN\
static int max_scsi_luns = 32;\
#else\
static int max_scsi_luns = 1;\
#endif
;}' file1.txt > output.txt |
|
r*****s 发帖数: 985 | 26 Hi, everybody,
I tried to use a shell script to do a for loop:
#!...bash
for i in (5, 10, 15, 20) do;
sed 's/bpp=64/bpp=$i/g' myfile.c > myfile2.c
~~
done
However, each time it executes, "bpp=64" becomes "bpp=$i" instead of
"bpp=5" ......
I have no idea how to make the $i inside sed command to be a real variable.
Anybody has a suggestion for it?
Thanks a lot! |
|
d*****y 发帖数: 12 | 27 Hi ,
I want to use sed on Unix to do this:
1. I have a string called tmp="12 23 34"
2. I want to replace all the space in this string with a new line and
dump it to a file
3. finally this file looks like this: 12
23
34
I tried this: print $tmp | sed 's/ /\n/g' it didn't work, so somebody
help????
Thanks
|
|
a*******s 发帖数: 324 | 28 I use tcsh.
sed -e /[0-9]/d filename
don't know how to just use only line to do it.
don't know how to just use only line to do it.
I don't know how to easily express non-capital alphabetical character
in "sed".
Is "grep" acceptable?
grep "^[A-Z]" filename |
|
e****e 发帖数: 179 | 29 when I use sed to replace a string in a file, it only shows on the screen that
string has been changed, but when I open that file, it is still the same as
before.
the command I used is:
sed -e 's,oldstr,newstr,' filename
thanks. |
|
c****j 发帖数: 258 | 30 sed -n '
#print first empty line
/^$/ p
#find next empty line, remove it
/^$/ {
N
s/.//
b Empty
}
#print non-empty lines
p
'
I don't like sed, but it can do something quite simply. |
|
s****a 发帖数: 6521 | 31 我没用过unix,
现在在服务器上运行一个小脚本出了错误:
$i="2000"
sed -i "s/.0*/$i/" file.txt
错误提示: sed: -e expression #1, char xx: unterminated `s' command
而同样的命令,我在自己的Linux下可以执行没有问题。
请问这是为什么,怎样解决呢?
谢谢! |
|
s*******u 发帖数: 89 | 32 上学时候用过一本课本,就叫sed and awk.网上有电子版的,搜搜呗 |
|
h********m 发帖数: 116 | 33 前几天面试被问到一个问题,中间需要删除文件里含有某个pattern的lines,但是如果
有另一个pattern就不用删除(比如说comment行)。请问这个怎么实现啊?
如果只删除pattern1,应该是 sed "/$PATTERN1/d" file
可是怎样限定这一行不是 “#”开头呢? |
|
d*********0 发帖数: 12 | 34 看看能不能用Regular Expression?
比如.
sed '/^[^#]*${PATTERN1}/d' file |
|
m*****k 发帖数: 731 | 35 echo "abcd" |sed 's/\(^[^#]*\)cd/\1/' |
|
|
发帖数: 1 | 37 2016/2017学年,中国人在美国拿博士学位的81%不会回来,数据来自SED。 |
|
d******e 发帖数: 143 | 38 原来可以用awk
好像awk比sed要powerful
thanks!
BEGIN |
|
W*******e 发帖数: 64 | 39 echo abcdefgh | sed 's/\(..\)/\1\n/g' |
|
|
D***a 发帖数: 939 | 41 将单引号改为双引号试试
sed "s/\'/\*/g" file > file-new |
|
h*******c 发帖数: 248 | 42 sed -e "s/'/\*/g" file >filenew |
|
l********r 发帖数: 175 | 43 Hi, my problem was solve by doing following:
sed "s/'/*/g" file > file-new;
no need slash. Thanks a lot for suggestions. |
|
i*****f 发帖数: 578 | 44 The following python code should do:
#!/usr/bin/env python
m = 200
for i in range(1, m+1):
b1 = open("file%d"%i).readlines()
b2 = []
for line in b1:
n = int(line.split()[1])
b2.append("step %d" % n+i*100)
open("file%d_new"%i, "w").writelines(b2)
Ugly, but should work. I don't test it though. This can also be done by sed+
sh or awk, but I'm not familiar with the latter.
字n |
|
|
R******d 发帖数: 1436 | 46 意图是这样的:
把T2 F2两个文件合并,然后对这个合并后的文件进行处理:
第一列打印到文件a,第二列添加一行(这一行是以一个变量的形式写的)后打印到文
件b。
下面是我写的,报错:
cat T2 F2|awk '{print $1 >"a";print $2|"sed "1s/^/'"$title"'\n/"" > "b" }'
请问怎么写才对?多谢了。 |
|
R******d 发帖数: 1436 | 47 哎呀,我不是想学怎么在awk里nest sed么。
出错可能和一些特殊符号的转义有关。 |
|
N**********d 发帖数: 9292 | 48 【 以下文字转载自 Programming 讨论区 】
发信人: NeedForSpeed (working~~~~~), 信区: Programming
标 题: sed里面正则表达式匹配字符越少越好怎么写?
发信站: BBS 未名空间站 (Sun Mar 13 20:56:30 2011, 美东)
例如:其中引号内长度不定
"abc", "def"
".*"
引号里面内容越少越好,我不想是 abc", "def
想要分别是
abc和def
这个该怎么写呢? |
|
N**********d 发帖数: 9292 | 49 好像不行啊
sed -n -e 's:.*pattern1="\(/pattern2/[^"]*\)":\1:p' "$file" > "link"
还是不对劲啊,因为括号里面有/,所以我用:分割,我想抓"$file"里面的所有这种在双
引号里面的/pattern2/[^"]*的样子
求教怎么写呢? |
|
|