Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果文件有windows行结尾,请将其更改为linux行结尾,否则不执行任何操作_Linux_File_Line_Line Endings - Fatal编程技术网

如果文件有windows行结尾,请将其更改为linux行结尾,否则不执行任何操作

如果文件有windows行结尾,请将其更改为linux行结尾,否则不执行任何操作,linux,file,line,line-endings,Linux,File,Line,Line Endings,我想写一个if语句,如果一个文件有windows的行尾,把它改成linux的行尾,否则什么都不做 这是以windows行结尾的文件^M或\r\n $ cat -v file.csv | head "Rec_Open_Date","MSISDN","IMEI","Data_Volume_Bytes","Device_Manufacturer","Device_Model","Product_Description"^M "2015-10-06","427","060","137765","Sam

我想写一个if语句,如果一个文件有windows的行尾,把它改成linux的行尾,否则什么都不做

这是以windows行结尾的文件
^M
\r\n

$ cat -v  file.csv | head
"Rec_Open_Date","MSISDN","IMEI","Data_Volume_Bytes","Device_Manufacturer","Device_Model","Product_Description"^M
"2015-10-06","427","060","137765","Samsung Korea","Samsung SM-G900I","$39 Plan"^M
"2015-10-06","592","620","0","Apple Inc","Apple iPhone 6 (A1586)","PREPAY  STD - TRIAL - #16"^M
"2015-10-06","007","290","0","Apple Inc","Apple iPhone 6 (A1586)","PREPAY PLUS - $0 -"^M
"2015-10-06","592","050","48836832","Apple Inc","Apple iPhone 5S (A1530)","Talk and Text Connect Flexi Plan"^M
"2015-10-06","409","720","113755347","Samsung Korea","Samsung SM-G360G","$29 CARRYOVER PLAN"^M
"2015-10-06","742","620","19840943","Apple Inc","Apple iPhone S (A1530)","PREPAY STD - $0 - #2"^M
"2015-10-06","387","180","0","HUAWEI Technologies Co Ltd","HUAWEI HUAWEI G526-L11","PREPAY STD - $1 - #4"^M
"2015-10-06","731","570","2258243","Samsung Korea","Samsung SM-N910U","Business Freedom"^M
"2015-10-06","556","910","13332272","Samsung Korea","Samsung GT-I9505","$49 Plan"^M
这是将其转换为linux行结尾的代码
\n

  $ awk 'sub("\r$", "")' file.csv | head | cat -v
    "Rec_Open_Date","MSISDN","IMEI","Data_Volume_Bytes","Device_Manufacturer","Device_Model","Product_Description"
    "2015-10-06","427","060","137765","Samsung Korea","Samsung SM-G900I","$39 Plan"
    "2015-10-06","592","620","0","Apple Inc","Apple iPhone 6 (A1586)","PREPAY  STD - TRIAL - #16"
    "2015-10-06","007","290","0","Apple Inc","Apple iPhone 6 (A1586)","PREPAY PLUS - $0 -"
    "2015-10-06","592","050","48836832","Apple Inc","Apple iPhone 5S (A1530)","Talk and Text Connect Flexi Plan"
    "2015-10-06","409","720","113755347","Samsung Korea","Samsung SM-G360G","$29 CARRYOVER PLAN"
    "2015-10-06","742","620","19840943","Apple Inc","Apple iPhone S (A1530)","PREPAY STD - $0 - #2"
    "2015-10-06","387","180","0","HUAWEI Technologies Co Ltd","HUAWEI HUAWEI G526-L11","PREPAY STD - $1 - #4"
    "2015-10-06","731","570","2258243","Samsung Korea","Samsung SM-N910U","Business Freedom"
    "2015-10-06","556","910","13332272","Samsung Korea","Samsung GT-I9505","$49 Plan"
这是我的基本if语句,我只是不知道如何从行尾判断正确与否:有人能告诉我该怎么做吗?

if [ $1 -gt 100 ]  ## line ending =^M
then
awk 'sub("\r$", "")' file.csv   ## remove the windows line endings
fi
据我所知,给自己留个便条 windows行结尾可以是
^M
\r\n
CRLF
。 linux行结尾可以是
\n
LF


EDIT1 思考是我想要的

$  eol=$(cat -v  file.csv | head -n1 | grep -o '..$')
$  echo "$eol"
^M
$ if [ "$eol" = "^M" ]; then echo "true"; fi
true
$ if [ "$eol" = "^M" ]; then echo "true"; else echo "false"; fi
true

我将把
awk'sub(“\r$”,“)”文件.csv
作为我的真实陈述

使用vi将文件格式更改为Unix,例如

vi file.txt <<EOF
:set fileformat=unix
ZZ
EOF

vi file.txt的作用是什么?如果文件已经有*nix行结尾,则
awk
命令是禁止操作的。如果您只需要转换行结尾,请参阅
man dos2unix
和^M、CR(来自CRLF)和“\r”描述相同的字符。
文件
实用程序的某些配置将报告类似“MS Windows文本文件”的内容。使用
file.csv文件检查您的verison。祝你好运。我应该提到的,但是,这可以在狂欢节上完成吗script@HatteickNZ上面是为添加到bash脚本而编写的。EOF标记用于将输入传递到脚本中的视图。