我对 GNU sed
、 POSIXsed
和 BSDsed
的无数选项感到很困惑。如何\n
使用这三种sed
类型用换行符替换文字?
在文本文件中,我想删除,
(逗号)和"
(引号)(仅当双引号包含以逗号分隔的数字时)。
56,72,"12,34,54",x,y,"foo,a,b,bar"
Run Code Online (Sandbox Code Playgroud)
预期输出
56,72,123454,x,y,"foo,a,b,bar"
Run Code Online (Sandbox Code Playgroud)
注意:我显示上面的行只是作为一个例子。我的文本文件包含多行如上,双引号中用逗号分隔的数字应该有所不同。那是,
56,72,"12,34,54",x,y,"foo,a,b,bar"
56,92,"12,34",x,y,"foo,a,b,bar"
56,72,"12,34,54,78,76,54,67",x,y,"foo,a,b,bar"
56,72,x,y,"foo,a,b,bar","12,34,54"
56,72,x,y,"foo,a,b,bar","12,34,54","45,57,84,92","bar,foo"
Run Code Online (Sandbox Code Playgroud)
预期输出:
56,72,123454,x,y,"foo,a,b,bar"
56,92,1234,x,y,"foo,a,b,bar"
56,72,12345478765467,x,y,"foo,a,b,bar"
56,72,x,y,"foo,a,b,bar",123454
56,72,x,y,"foo,a,b,bar",123454,45578492,"bar,foo"
Run Code Online (Sandbox Code Playgroud)
n
双引号内有许多数字,以逗号分隔。并且还保留包含字符的双引号。
我喜欢sed
文本处理工具。如果您sed
为此发布任何解决方案,我很高兴。
Unix 中的一个简单 for 循环是:
for FILE in $BASE_WORK_DIR/*.pdf
do
echo $FILE
done
Run Code Online (Sandbox Code Playgroud)
这将回.pdf
显 BASE_WORK_DIR 目录中的所有文件。
如果还BASE_WORK_DIR
包含子目录,其中也包含 pdf 文件怎么办。
在这种情况下,我如何设计我的 for 循环来获取所有 pdf 文件BASE_WORK_DIR
以及子目录BASE_WORK_DIR
?
我有以下awk
脚本,它采用以下输入文件,input.txt
并生成以下输出。有人可以花点时间分解一下这个awk
脚本是如何工作的吗?我花了一些时间在它上面,但它没有多大意义。
输入:
$ cat input.txt
FINISHED
RSYNCJOBNA
20140502 0021 2182096 2082096 6 5
2014820905820902 10:02:15
2014820905820902 10:56:42
0:54:27
INITIATED
RSYNCJOBNA
20140502 0022 3282096 3182096 6 5
2014820905820902 15:31:06
0:06:04 ce eque**
Run Code Online (Sandbox Code Playgroud)
输出:
RSYNCJOBNA|0021|20140502|10:02:15|10:56:42|0:54:27|FINISHED
RSYNCJOBNA|0022|20140502|15:31:06| |0:06:04|INITIATED
Run Code Online (Sandbox Code Playgroud)
获取上述输出的命令:
awk -v OFS='|' '/FINISHED|INITIATED/ {
status = $1; getline;
jobname = $1; getline;
sequence = $2; date = $1; getline;
start = $2; getline;
if (status == "FINISHED") { end = $2; getline } else { end = …
Run Code Online (Sandbox Code Playgroud) 我在awk
使用该getline
功能的SO上发布答案时得到了奇怪的评论。
这是该答案的链接。
发布我的答案后,一位用户提出了以下评论,(我不批评他。)
不是一个好的解决方案,无论内容如何,它都会加入行,并且在需要时不处理更多行。你应该避免使用 getline。
它指出,我们应该避免getline
的功能awk
。所以我的问题是,
getline
在 awk 中使用函数安全吗?getline
,什么情况下不应该使用?我想在/home
目录内创建一个文件夹,在目录内创建另一个文件夹/home/$USER
。同一系统上的其他用户是否可以访问/home
目录中的文件夹 ?
在/home
目录中创建文件夹有什么缺点吗?
在 /home 和 /home/$USER 目录中创建目录有什么区别?
我想通过 perl one-liner 命令删除特定行中的换行符。
输入:
1407233497,1407233514,bar
1407233498,1407233515,foo
mingstats&fmt=n
1407233499,1407233516,foobar
Run Code Online (Sandbox Code Playgroud)
预期输出:
1407233497,1407233514,bar
1407233498,1407233515,foomingstats&fmt=n
1407233499,1407233516,foobar
Run Code Online (Sandbox Code Playgroud)
到目前为止我尝试了什么?
此正则表达式\n(?!\d+,\d+)
与我要删除的换行符完全匹配。但我不知道如何通过 perl one-liner 命令实现它。我试过,
perl -pe 's/\n(?!\d+,\d+)//g' file
Run Code Online (Sandbox Code Playgroud)
但它删除了该文件中的所有换行符,最后在一行中打印以下内容,
1407233497,1407233514,bar1407233498,1407233515,foomingstats&fmt=n1407233499,1407233516,foobar
Run Code Online (Sandbox Code Playgroud)
如果 perl one-liner 命令使用上面的正则表达式,我会很高兴...