相关疑难解决方法(0)

如何更改sed认为的行分隔符

因为我是sed的新手,所以我很高兴看到sed不认为\ r \n字符是有效的行分隔符.

有没有人知道如何告诉sed在处理多行文本时,我希望将哪些字符用作行分隔符?

sed

6
推荐指数
1
解决办法
2758
查看次数

输出以分号分隔的字符串

让我们说我们有这个文件:

{
  "persons": [
    {
      "friends": 4,
      "phoneNumber": 123456,
      "personID": 11111
    },
    {
      "friends": 2057,
      "phoneNumber": 432100,
      "personID": 22222
    },
    {
      "friends": 50,
      "phoneNumber": 147258,
      "personID": 55555
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我现在想提取的人的电话号码11111,22222,33333,4444455555以分号分隔的字符串:

123456;432100;;;147258
Run Code Online (Sandbox Code Playgroud)

在跑步的时候

cat persons.txt | jq ".persons[] | select(.personID==<ID>) | .phoneNumber"
Run Code Online (Sandbox Code Playgroud)

每次一次<ID>并将结果与​​后续工作粘合在一起;,这非常慢,因为它必须为每个ID(以及我想要提取的其他字段)重新加载文件.

在单个查询中连接它:

 cat persons.txt | jq "(.persons[] | select(.personID==11111) | .phoneNumber), (.persons[] | select(.personID==22222) | .phoneNumber), (.persons[] | select(.personID==33333) | .phoneNumber), (.persons[] | select(.personID==44444) …
Run Code Online (Sandbox Code Playgroud)

bash json export-to-csv jq

6
推荐指数
1
解决办法
503
查看次数

替换换行sed

如何使用sed命令从行替换\n

replace sed

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

(如何)我可以使用sed删除所有换行符(\n)?

我试图删除管道中的所有换行符,如下所示:

(echo foo; echo bar) | sed -e :a -e N -e '$!ba' -e 's/\n/ /g' | hexdump -C
Run Code Online (Sandbox Code Playgroud)

导致debian挤压的结果如下:

00000000  66 6f 6f 20 62 61 72 0a                           |foo bar.|
00000008
Run Code Online (Sandbox Code Playgroud)

不删除尾随换行符.

tr -d '\n'如在如何从文本文件中删除换行符?工作得很好,但不是sed.

newline sed

5
推荐指数
2
解决办法
2万
查看次数

在使用sed模式之前,如何删除换行/换行符

标题已注明:

我想使用一些Linux一线(例如sed)

转变

Anytext
{
Run Code Online (Sandbox Code Playgroud)

进入

Anytext{
Run Code Online (Sandbox Code Playgroud)

可以使用sed来完成此操作,如果不使用sed则可以使用awk一个内衬来完成?

awk sed

4
推荐指数
1
解决办法
7269
查看次数

如何从文件中删除\n字符?

我有一个问题应该让大多数人都去"WTF?",但我仍然拥有它.

我从供应商处获得了大量数据文件.它采用自定义平面文件格式,声称为CSV,但不以逗号分隔,并且不引用值.所以,根本不是真正的CSV.

foo,bar,baz
alice,bob,chris
Run Code Online (Sandbox Code Playgroud)

等等,除了更长,更少有趣.问题是,有些记录嵌入了换行符(!!!):

foo,bar
rab,baz
alice,bob,chris
Run Code Online (Sandbox Code Playgroud)

这应该是每个三个字段的两个记录.通常情况下,我只会说"不,这是愚蠢的.",但我不经意地看得更近了,发现它实际上是一种不同于实际行结束序列的行尾:

foo,bar\n
rab,baz\r\n
alice,bob,chris\r\n
Run Code Online (Sandbox Code Playgroud)

注意第一行上的\n.我已经确定这适用于我发现嵌入式换行的所有情况.所以,我需要基本上做s/\n$//(我尝试了这个特定的命令,它没有做任何事情).

注意:我实际上并不关心字段的内容,因此无需更换换行符.我只需要文件中的每一行都有相同数量的记录(理想情况下,在同一个地方).

我在处理文件的工具中有一个现有的解决方案:

Guid g = Guid.NewGuid();

string data = File.ReadAllText(file, Encoding.GetEncoding("Latin1"));
data = data.Replace("\r\n", g.ToString()); //just so I have a unique placeholder
data = data.Replace("\n", "");
data = data.Replace(g.ToString(), "\r\n");
Run Code Online (Sandbox Code Playgroud)

但是,对于大于千兆字节左右的文件,这会失败.(另外,我没有对它进行分析,但我怀疑它的狗也很慢).

我可以使用的工具是:

  • cygwin工具(sed,grep等)
  • .净

做这个的最好方式是什么?

.net c# newline sed

4
推荐指数
1
解决办法
1661
查看次数

sed - 在模式中包含换行符

我仍然是shell脚本的菜鸟,但我正在努力.下面是一个部分工作的shell脚本,它应该通过匹配标记并删除其附带的内容来从*.htm文档中删除所有JS.例如<script src="">,<script></script><script type="text/javascript">

find $1 -name "*.htm" > ./patterns
for p in $(cat ./patterns)
do
sed -e "s/<script.*[.>]//g" $p #> tmp.htm ; mv tmp.htm $p
done
Run Code Online (Sandbox Code Playgroud)

这个问题是脚本是因为sed逐行读取文本输入,这个脚本将无法按预期使用换行.运行:

<script>
//Foo
</script>
Run Code Online (Sandbox Code Playgroud)

将删除第一个脚本标记,但将省略我不想要的"foo"和结束标记.

有没有办法匹配我的正则表达式中的换行符?或者如果sed不合适,还有什么我可以使用的吗?

regex shell cygwin sed

4
推荐指数
1
解决办法
6482
查看次数

如何使用regex/terminal工具删除csv单元格中的换行符?

我有一个csv文件,其中一些单元格内部有换行符.例如:

id,name 
01,"this is
with newline"
02,no newline 
Run Code Online (Sandbox Code Playgroud)

我想删除单元格内的所有换行符.

如何使用正则表达式或其他终端工具一般不事先知道列数?

regex unix terminal perl sed

4
推荐指数
2
解决办法
1948
查看次数

Sed:用“-z”替换换行符?

问题:与替换一些正则表达式\nsed

解决方法:类似的答案有很多[ 1 ][ 2 ][ 3 ][ 4 ],还有很多其他的链接我就不链接了。他们都建议你创建一个新标签:a,合并行N,分支到:aif not end-of-file $!ba,然后执行一些命令。

也就是说...... 在GNU sed手册中,有一个-z选项:

-z
--null-data
--zero-terminated

Treat the input as a set of lines, each terminated by a zero byte
(the ASCII ‘NUL’ character) instead of a newline. This option can
be used with commands like ‘sort -z’ and ‘find -print0’ to process
arbitrary file names. 
Run Code Online (Sandbox Code Playgroud)

因此,首先,出于比较原因,如果我们尝试幼稚的方法:

$ seq 3 | sed 's/\n/ /g' …
Run Code Online (Sandbox Code Playgroud)

sed

4
推荐指数
1
解决办法
1810
查看次数

sed帮助:匹配并替换文字“ \ n”(不是换行符)

我有一个包含多个\ n实例的文件。

我想用实际的换行符替换它们,但是sed无法识别\ n

我试过了

sed -r -e 's/\n/\n/'
sed -r -e 's/\\n/\n/'
sed -r -e 's/[\n]/\n/'
Run Code Online (Sandbox Code Playgroud)

以及其他多种转义方式。

sed是否能够识别文字\ n?如果是这样,怎么办?

是否有另一个程序可以读取将\ n解释为真实换行符的文件?

linux bash newline sed pattern-matching

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

标签 统计

sed ×9

newline ×3

bash ×2

regex ×2

.net ×1

awk ×1

c# ×1

cygwin ×1

export-to-csv ×1

jq ×1

json ×1

linux ×1

pattern-matching ×1

perl ×1

replace ×1

shell ×1

terminal ×1

unix ×1